Вопрос

Как вы избегаете знака % при использовании 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)

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

Если в строке нет форматов, вы можете использовать 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 - это другое дело:используйте %% для печати одного %.

Да, используйте 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*%"

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top