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

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

printf("hello\%"); /* not like this */
+212
07 дек. '09 в 14:02
источник поделиться
14 ответов

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

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

printf("hello%%");

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

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

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

+324
07 дек. '09 в 14:03
источник

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

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

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

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

printf("%s", c)

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

+33
07 дек. '09 в 14:06
источник
другие ответы

Связанные вопросы


Похожие вопросы

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

puts("hello%");

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

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

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

+28
07 дек. '09 в 14:04
источник

С собой...

printf("hello%%"); /* like this */
+9
07 дек. '09 в 14:03
источник

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

+7
07 дек. '09 в 14:04
источник

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

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

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

+7
07 дек. '09 в 14:28
источник

Вот так:

printf("hello%%");
//-----------^^ inside printf, use two percent signs together
+4
07 дек. '09 в 14:28
источник

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

+3
07 дек. '09 в 14:07
источник

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

+2
08 дек. '09 в 5:40
источник

вы используете неправильный формат, вы должны использовать %% для печати %. Ваш код должен быть:

printf("hello%%");  

Подробнее все спецификаторы формата, используемые в C.

+2
25 мая '15 в 3:38
источник

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

Пример:

printf("You gave me 12.3 %% of profit");
+2
23 июл. '16 в 19:14
источник

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

printf("100%%");

Результат:

100%

+2
19 авг. '16 в 14:38
источник

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

0
21 окт. '17 в 17:35
источник

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

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

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

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

-2
08 дек. '09 в 15:34
источник

Посмотрите другие вопросы по меткам или Задайте вопрос