Как избежать знака% (процентов) в printf C? - PullRequest
256 голосов
/ 07 декабря 2009

Как избежать знака% при использовании printf в C?

printf("hello\%"); /* not like this */

Ответы [ 14 ]

389 голосов
/ 07 декабря 2009

Вы можете избежать этого, указав двойной символ «%»: %%

Используя ваш пример:

printf("hello%%");

Экранирующий знак «%» предназначен только для printf. Если вы делаете:

char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);

Будет напечатано: This is a's value: %%

35 голосов
/ 07 декабря 2009

Как уже говорили другие, %% избежит%.

Обратите внимание, однако, что вы никогда не должны делать это:

char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);

Всякий раз, когда вам нужно напечатать строку, всегда, всегда, всегда печатайте ее, используя

printf("%s", c)

для предотвращения встраивания% от проблем [нарушения памяти, segfault и т. Д.]

30 голосов
/ 07 декабря 2009

Если в строке нет форматов, вы можете использовать puts (или fputs):

puts("hello%");

если в строке есть формат:

printf("%.2f%%", 53.2);

Как отмечено в комментариях, puts добавляет \n к выводу, а fputs - нет.

9 голосов
/ 07 декабря 2009

С собой ...

printf("hello%%"); /* like this */
7 голосов
/ 07 декабря 2009

придираться:
Вы на самом деле не экранируете % в строке, которая определяет формат для семейства функций printf()scanf()).

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

Строка действительно содержит 2 '%' символов внутри (в отличие от экранирующих символов: "a\bc" - это строка с 3 ненулевыми символами; "a%%b" - это строка с 4 ненулевыми символами) .

6 голосов
/ 07 декабря 2009

используйте двойной %%

4 голосов
/ 07 декабря 2009

Как это:

printf("hello%%");
//-----------^^ inside printf, use two percent signs together
3 голосов
/ 07 декабря 2009

Обратная косая черта в C используется для экранирования символов в строках. Строки не будут распознавать% как специальный символ, и поэтому нет необходимости в экранировании. Printf - это другой вопрос: используйте %% для печати одного%.

2 голосов
/ 19 августа 2016

Вы можете использовать %%:

printf("100%%");

Результат:

100%

2 голосов
/ 23 июля 2016

Вы можете просто использовать % дважды, то есть "%%"

Пример:

printf("You gave me 12.3 %% of profit");
...