Странный спецификатор формата в 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, как говорится в Википедии, он не определяется стандартом Си.

Другие вопросы по тегам