2015-12-05 4 views
1

У меня есть вопрос, связанный с «PRINTF» инструкции в примере переменного тока:Странный формат спецификатор с с процентным характером

printf("Percentage character: %%",10); 

Выход правильно: Процент символов:%

Почему этот формат -спецификатор (%%)? Что там с этим 10? Почему компилятор говорит, что слишком много аргументов для printf?

Я попытался отобразить процент персонажа по-другому:

printf("Percentage character: %c",putch(37)); 

Однако выход не очень хорошо:% Доля charcater:%

Почему кажется, что процент символ перед предложением?

+1

Вы внимательно прочитали документацию по [printf] (http://man7.org/linux/man-pages/man3/printf.3.html)? Включили ли вы все предупреждения и информацию об отладке в своем компиляторе ('gcc -Wall -Wextra -g')? –

+2

http://stackoverflow.com/questions/1860159/how-to-escape-the-sign-in-cs-printf – SomeWittyUsername

ответ

2

%% преобразование спецификация используется в printf для печати одного % (аргументы не преобразуются).

Например:

printf("10%%\n"); 

печатает

10% 

Теперь в вашем примере:

printf("Percentage character: %%",10); 

в порядке, но printf второй аргумент просто игнорируется. Это эквивалентно:

printf("Percentage character: %%"); 

Что касается последнего примера:

printf("Percentage character: %c",putch(37)); 

как printf и putch символов записи в стандартный выходной поток, поэтому первый putch оценивается и записывает символ, а затем printf напишет Серию символов к стандартному выходу. Использование:

 printf("Percentage character: %c", 37); 

, если вы не хотите, первый % или, лучше:

 printf("Percentage character: %c", '%'); 

, если вы хотите, чтобы быть независимым от набора символов (37% в ASCII, но может иметь другое значение на других наборах символов).

+0

Спасибо! Не могли бы вы рассказать мне, почему второй вывод содержит один дополнительный процент перед предложением? –

+0

@ RevnicRobert-Nick, что дополнительный '%', вероятно, объясняется оценкой 'putch (37)'. – Haris

+0

@ RevnicRobert-Nick правильным вызовом является 'printf (« Процентный символ:% c », 37);' (в ASCII), 'putch' также записывает символ в' stdout'. – ouah

2

Почему этот формат спецификатор (%%)

Подумайте о ситуации, в которой вы хотели бы напечатать % через printf(). Если вы просто дадите %, это будет принято в качестве части спецификатора формата. Таким образом, чтобы напечатать % вам нужно сделать %%


И что с этим 10 вон там? И почему компилятор говорит, что слишком много аргументов для Printf?

10 - это еще один параметр для printf(). Как нет спецификатора формата, чтобы соответствовать этому параметру, так что вы получаете too many arguments for printf сообщения


В этом

printf("Percentage character: %c",putch(37)); 

putch() поставляется из стандартной библиотеки conio.h и не поддерживаются в Linux, Как говорит Wikipedia, он не определяется стандартом C.

+0

Спасибо! –