Как избежать знака% (процента) в C printf?

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

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

Ответ 1

Вы можете избежать этого, разместив двойной "%" следующим образом: %%

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

printf("hello%%");

Вывод "%" только для printf. Если вы выполните:

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

Он напечатает: This is a value: %%

Ответ 2

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

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

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

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

printf("%s", c)

чтобы предотвратить возникновение проблем с встроенным% [нарушениями памяти, segfault и т.д.]

Ответ 3

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

puts("hello%");

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

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

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

Ответ 4

С собой...

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

Вот так:

printf("hello%%");
//-----------^^ inside printf, use two percent signs together

Ответ 8

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

Ответ 9

Yup, используйте printf ( "hello %%" ); и это было сделано.

Ответ 11

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

Пример:

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

Ответ 12

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

printf("100%%");

Результат:

100%

Ответ 13

Двойной "%" работает также в ".Format(...). Пример (с iDrawApertureMask == 87, fCornerRadMask == 0.05): csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ; дает желаемое и ожидаемое значение (содержимое строки в) csCurrentLine;    "% ADD87C, 0.0500 *%"

Ответ 14

Используйте это:

#include <stdio.h>
printf("hello%s%s");

Полный список спецификаторов формата, используемых с printf, можно найти здесь:

http://www.mekong.net/tech/printf.htm