318

在 C 中使用时如何转义 % 符号printf

printf("hello\%"); /* not like this */
4

13 回答 13

486

您可以通过发布这样的双 '%' 来逃避它:%%

使用您的示例:

printf("hello%%");

转义 '%' 符号仅适用于printf。如果你这样做:

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

它将打印:This is a's value: %%

于 2009-12-07T14:03:32.017 回答
43

正如其他人所说, %% 将逃脱 %。

但是请注意,您永远不应该这样做:

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

每当你必须打印一个字符串时,总是,总是,总是使用

printf("%s", c)

防止嵌入的 % 引起问题(内存违规、分段错误等)。

于 2009-12-07T14:06:41.167 回答
34

如果字符串中没有格式,您可以使用puts(或fputs):

puts("hello%");

如果字符串中有格式:

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

如评论中所述,puts将 a 附加\n到输出而fputs不是。

于 2009-12-07T14:04:59.030 回答
11

与自己...

printf("hello%%"); /* like this */
于 2009-12-07T14:03:58.707 回答
7

Nitpick:
您并没有真正转义指定(and ) 系列函数%格式的字符串中的。printf()scanf()

(and ) 函数族%中的, 启动转换规范。转换规范的规则之一指出, a作为转换说明符(紧跟在开始转换规范的 之后)导致写入字符时不转换任何参数。printf()scanf()%%'%'

该字符串内部确实有 2 个'%'字符(与转义字符相反:"a\bc"是具有 3 个非空字符"a%%b"的字符串;是具有 4 个非空字符的字符串)。

于 2009-12-07T14:28:42.333 回答
6

使用%%

printf("hello%%");
于 2009-12-07T14:04:10.030 回答
5

像这样:

printf("hello%%");
//-----------^^ inside printf, use two percent signs together
于 2009-12-07T14:28:18.840 回答
5

您使用了不正确的格式说明符。您应该%%用于打印%。您的代码应该是:

printf("hello%%");  

阅读更多C 中使用的所有格式说明符

于 2015-05-25T03:38:43.283 回答
5

您可以使用 %%:

printf("100%%");

结果是:

100%

于 2016-08-19T14:38:55.347 回答
4

C 中的反斜杠用于转义字符串中的字符。字符串不会被识别%为特殊字符,因此不需要转义。printf是另一回事:用于%%打印一个%.

于 2009-12-07T14:07:08.963 回答
3

是的,使用printf("hello%%");它就完成了。

于 2009-12-08T05:40:43.227 回答
3

您可以简单地使用%两次,即"%%"

例子:

printf("You gave me 12.3 %% of profit");
于 2016-07-23T19:14:35.000 回答
2

双 '%' 也适用于 ".Format(...)。示例(使用 iDrawApertureMask == 87,fCornerRadMask == 0.05): csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ; 给出 csCurrentLine 中(字符串内容)的期望值和期望值;"%ADD87C, 0.0500*% "

于 2017-10-21T17:35:01.197 回答