Как избежать знака % (percent) в C's printf?
-
13-09-2019 - |
Вопрос
Как вы избегаете знака % при использовании printf
в 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: %%
Другие советы
Как уже говорили другие, %% избежит %.
Однако обратите внимание, что вы никогда не должны этого делать:
char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);
Всякий раз, когда вам нужно напечатать строку, всегда, всегда, всегда выводите ее с помощью
printf("%s", c)
чтобы встроенный % не вызывал проблем [нарушения памяти, сбой сегмента и т.д.]
С самим собой...
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 - это другое дело:используйте %% для печати одного %.
Да, используйте printf("привет%%");и это сделано.
Вы можете просто использовать %
дважды, то есть "%%"
Пример:
printf("You gave me 12.3 %% of profit");
Вы можете использовать %%:
printf("100%%");
В результате получается:
100%
вы используете неправильный спецификатор формата, который вы должны использовать %%
для печати %
.Ваш код должен быть:
printf("hello%%");
Подробнее все спецификаторы формата, используемые в C.
Двойное '%' работает также в ".Format(...).Пример (с iDrawApertureMask == 87, fCornerRadMask == 0,05):csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;
выдает желаемое и ожидаемое значение (строковое содержимое в) csCurrentLine;"%ADD87C, 0,0500*%"