Как вы избегаете знака% при использовании printf
в C?
printf("hello\%"); /* not like this */
Как вы избегаете знака% при использовании printf
в C?
printf("hello\%"); /* not like this */
Вы можете избежать этого, разместив двойной "%" следующим образом: %%
Используя ваш пример:
printf("hello%%");
Вывод "%" только для printf. Если вы выполните:
char a[5];
strcpy(a, "%%");
printf("This is a value: %s\n", a);
Он напечатает: This is a value: %%
Как говорили другие, %% выйдет из%.
Обратите внимание, что вы никогда не должны этого делать:
char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);
Всякий раз, когда вы должны печатать строку, всегда, всегда, всегда печатайте ее с помощью
printf("%s", c)
чтобы предотвратить возникновение проблем с встроенным% [нарушениями памяти, segfault и т.д.]
Если в строке нет форматов, вы можете использовать puts
(или fputs
):
puts("hello%");
если в строке есть формат:
printf("%.2f%%", 53.2);
Как отмечено в комментариях, puts
добавляет \n
к выходу, а fputs
- нет.
С собой...
printf("hello%%"); /* like this */
используйте двойной %%
придираться:
Вы действительно не избегаете %
в строке, которая определяет формат семейства функций printf()
(и scanf()
).
%
в семействе функций printf()
(и scanf()
) начинает спецификацию преобразования. В одном из правил спецификации преобразования указано, что %
как спецификатор преобразования (сразу после %
, который начал спецификацию преобразования) вызывает запись символа '%'
без преобразования аргументов.
Строка действительно содержит 2 '%'
символов внутри (в отличие от экранирующих символов: "a\bc"
- строка с 3 непустыми символами; "a%%b"
- строка с 4 непустыми символами).
Вот так:
printf("hello%%");
//-----------^^ inside printf, use two percent signs together
Обратная косая черта в C используется для удаления символов в строках. Строки не будут распознавать% как особый символ, и поэтому никакого выхода не потребуется. Printf - другое дело: используйте %% для печати одного%.
Yup, используйте printf ( "hello %%" ); и это было сделано.
вы используете неправильный формат, вы должны использовать %%
для печати %
. Ваш код должен быть:
printf("hello%%");
Подробнее все спецификаторы формата, используемые в C.
Вы можете просто использовать %
дважды, то есть "%%"
Пример:
printf("You gave me 12.3 %% of profit");
Вы можете использовать %%:
printf("100%%");
Результат:
100%
Двойной "%" работает также в ".Format(...).
Пример (с iDrawApertureMask == 87, fCornerRadMask == 0.05):
csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;
дает желаемое и ожидаемое значение (содержимое строки в) csCurrentLine; "% ADD87C, 0.0500 *%"
Используйте это:
#include <stdio.h>
printf("hello%s%s");
Полный список спецификаторов формата, используемых с printf, можно найти здесь: