Вопрос

Я немного поискал этот вопрос, но не получил особенно прямого ответа.В C (и я думаю, C ++), как вы определяете, что идет после % при использовании printf?.Например:

double radius = 1.0;
double area = 0.0;
area = calculateArea( radius );
printf( "%10.1f     %10.2\n", radius, area );

Я взял этот пример прямо из книги, которая у меня есть по языку Си.Для меня это вообще не имеет смысла.С чего вы взяли, что 10.1f и 10.2f?Не мог бы кто-нибудь, пожалуйста, объяснить это?

Это было полезно?

Решение

http://en.wikipedia.org/wiki/Printf#printf_format_placeholders это ссылка Википедии на заполнители формата в printf. http://www.cplusplus.com/reference/clibrary/cstdio/printf.html это также полезно

По сути, в простой форме это %[ширина].[точность] [тип].Width позволяет вам убедиться, что печатаемая переменная имеет по крайней мере определенную длину (полезно для таблиц и т.д.).Точность позволяет указать точность, с которой печатается число (например.десятичные разряды и т.д.) и сообщает C / C ++, какой является переменная, которую вы ей указали (символьная, целочисленная, двойная и т.д.).

Надеюсь, это поможет

Обновить:

Чтобы прояснить ситуацию, используйте ваши примеры:

printf( "%10.1f     %10.2\n", radius, area );

%10.1f (относится к первому аргументу:radius) означает сделать его длиной в 10 символов (т.е.блокнот с пробелами) и выведите его в виде числа с плавающей запятой с одним десятичным знаком.

%10.2 (имеется в виду второй аргумент:area) означает сделать его длиной в 10 символов (как указано выше) и напечатать с двумя знаками после запятой.

Другие советы

man 3 printf

в системе Linux это предоставит вам всю необходимую информацию.Вы также можете найти эти страницы руководства в Интернете, например, по адресу http://linux.die.net/man/3/printf

10.1f означает точку с плавающей запятой с 1 знаком после запятой и 10 знаками перед десятичной запятой.Если номер содержит менее 10 цифр, он дополняется пробелами.10.2f - это то же самое, но с двумя знаками после запятой.

В каждой системе, которую я видел, от миграции Unix до Rails, это не так.@robintw выражает это лучше всего:

По сути, в простой форме это %[ширина].[точность] [тип].

То есть, не "10 мест до того, как десятичная точка", но "10 знаков, как до, так и после, и включая десятичная точка."

10.1f означает значение с плавающей запятой шириной 10 символов с 1 знаком после запятой.Если номер содержит менее 10 цифр, он дополняется пробелами.10.2f - это то же самое, но с двумя знаками после запятой.

У вас есть следующие основные типы:

%d   - integer
%x   - hex integer
%s   - string
%c   - char (only one)
%f   - floating point (float)
%d   - signed int (decimal)
%i   - signed int (integer) (same as decimal).
%u   - unsigned int
%ld  - long (signed) int
%lu  - long unsigned int
%lld - long long (signed) int
%llu - long long unsigned int

Редактировать:есть несколько других, перечисленных в ответе @Eli (man 3 printf).

Короче говоря, эти значения после % говорят printf как интерпретировать (или вывести) все переменные, которые появятся позже.В вашем примере, radius интерпретируется как значение с плавающей точкой (это "f"), а 10.1 предоставляет информацию о том, сколько знаков после запятой следует использовать при распечатке.

Видишь эта ссылка для получения более подробной информации обо всех модификаторах вы можете использовать с printf.

10.1f означает, что вы хотите отобразить fхлеб с 1 десятичное число, и отображаемое число должно быть 10 символы длиной.

Справочные страницы содержат нужную вам информацию.Чтобы прочитать то, что у вас есть выше:

printf( "%10.2f", 1.5 )

Это выведет:

         1.50

Принимая во внимание , что:

printf("%.2f", 1.5 )

С принтами:

1.50

Обратите внимание на обоснование того и другого.Аналогично:

printf("%10.1f", 1.5 )

Напечатал бы:

        1.5

Любое число после .это та точность, которую вы хотите напечатать.Любое число перед .это расстояние от левого поля.

Один из вопросов, который не был поднят другими, заключается в том, является ли двойной это то же самое, что и плавать.В некоторых системах для double требовался другой спецификатор формата по сравнению с float.Не в последнюю очередь потому, что передаваемые параметры могут быть разного размера.

 %f - float
 %lf - double
 %g - double

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top