Странный спецификатор формата в c с символом процента
У меня есть вопрос, связанный с инструкцией "printf" в примере AC:
printf("Percentage character: %%",10);
Вывод правильный: символ процента:%
Почему этот спецификатор формата (%%)? Что с этими 10 там? Почему компилятор говорит, что слишком много аргументов для printf
?
Я попытался отобразить символ процента по-другому:
printf("Percentage character: %c",putch(37));
Тем не менее, результат не очень хороший:% Процентная доля:%
Почему появляется этот символ в процентах перед предложением?
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, но может иметь другое значение в других наборах символов).
Почему этот спецификатор формата (%%)
Подумайте о ситуации, когда вы хотели бы напечатать %
через printf()
, Если вы просто даете %
это будет рассматриваться как часть спецификатора формата. Таким образом, чтобы напечатать %
тебе нужно сделать %%
И что с этими 10 там? И почему компилятор говорит, что слишком много аргументов для printf?
10
это просто еще один параметр для printf()
, Поскольку не существует спецификатора формата, соответствующего этому параметру, вы получаете too many arguments for printf
сообщение
В этом
printf("Percentage character: %c",putch(37));
putch()
приходит из стандартной библиотеки conio.h
и он не поддерживается в Linux, как говорится в Википедии, он не определяется стандартом Си.