Как избежать знака% при использовании printf
в C?Как избежать знака% (процента) в распечатке C?
printf("hello\%"); /* not like this */
Как избежать знака% при использовании printf
в C?Как избежать знака% (процента) в распечатке C?
printf("hello\%"); /* not like this */
Вы можете избежать этого, разместив двойной '%', как это: %%
Используя ваш пример:
printf("hello%%");
Выходящий знак '%' только для Printf. Если вы делаете:
char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);
Это будет печатать: This is a's value: %%
С собой ...
printf("hello%%"); /* like this */
использовать двойной %%
Если нет форматов в строке, вы можете использовать puts
(или fputs
):
puts("hello%");
если есть формат в строке:
printf("%.2f%%", 53.2);
Как было отмечено в комментариях, puts
добавляет \n
к выходу и fputs
не делает.
+1, так что многие люди забывают о том (или иметь никогда не слышал) ставит(). Я вижу так много людей, использующих Е() для строк, которые не имеют никакого отношения к расширению. Это лучший ответ. –
Стоит отметить, fputs() также, как это непосредственно взаимности на fprintf(). –
пут также добавляет новую строку [даже если у вас уже есть] .Если вы этого хотите, отлично. В противном случае ... – Mikeage
Как уже говорилось, %% избежит%.
Заметим, однако, что вы никогда не должны делать это:
char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);
Всякий раз, когда вы должны напечатать строку, всегда, всегда, всегда печатать его с помощью
printf("%s", c)
предотвратить внедренный% из-за проблем [нарушения памяти, segfault и т. д.]
предупреждение, как правило, целесообразно, однако могут возникнуть ситуации, в которых вы хотите сделать«это». - до тех пор, как вы знаете, что строка, которую вы предоставите, будет интерпретироваться как строка формата –
Однажды я придумал альтернативное решение - скопируйте буфер в другой буфер, а затем повторите его, удвоив знаки%. Я в конце концов наткнулся на эту идею и заменил функцию 20-30 строк одной строкой. Не волнуйся, я сильно избил себя над головой, как я заслужил. –
Правда, но не забывайте, что в 99% случаев, когда вы получаете строку формата, вы получаете аргументы как va_list, поэтому вам нужно использовать vprintf. Таким образом, я технически корректен;) – Mikeage
Обратная косая черта на C используется для удаления символов в строках. Строки не будут распознавать% как особый символ, и поэтому никакого выхода не потребуется. Printf - другое дело: используйте %% для печати одного%.
Как это:
printf("hello%%");
//-----------^^ inside printf, use two percent signs together
придираться:
Вы действительно не избежать %
в строке, которая определяет формат для семьи printf()
(и scanf()
) функций.
%
, в семействе функций printf()
(и scanf()
), начинается спецификация преобразования. В одном из правил спецификации преобразования указано, что %
в качестве спецификатора преобразования (сразу после %
, который начал спецификацию преобразования) вызывает запись символа '%'
без преобразования аргументов.
Строка действительно имеет 2 '%'
символов внутри (в отличие от вылетающих символов: "a\bc"
является строкой с 3 без нулевых символов; "a%%b"
является строкой с 4 без нулевых символов).
технически, он все еще «ускользает»; персонажи, которые являются особыми, нуждаются в способе «избежать» своего особого значения и вернуться к их «характеру характера» – ShinTakezou
Да, использование Е ("привет %%"); и все сделано.
Используйте это:
#include <stdio.h>
printf("hello%s%s");
Полный список спецификаторов формата используется с Printf можно найти здесь:
№ Неправильно. См. Другие ответы. –
Совершенно неправильно. Не следуйте этому подходу. Использование «% s» с printf без предоставления какой-либо строки в качестве параметра может привести к непредсказуемым результатам (это то, как много подвигов ладят). – AntonK
вы используете неправильный спецификатор формата, вы должны использовать %%
для печати %
, Ваш код должен быть:
printf("hello%%");
Подробнее all format specifiers used in 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 *%"
"Е (" привет %% ");" верно. Думаю, это не побег. используйте printf ("hello \ 045"); –
@Pablo Santa Cruz: этот метод «escape» '%' специфичен для 'printf', правильно? – Lazer
@eSKay: правильный. Только для printf. –