我是C的初学者,我想知道为什么这个程序不打印%sign?
代码是:
#include<stdio.h>
main()
{
printf("%");
getch();
}
答案 0 :(得分:62)
你的问题是你必须改变:
printf("%");
到
printf("%%");
或者你可以使用ASCII码并写:
printf("%c", 37);
:)
答案 1 :(得分:14)
在本主题中没有解释为什么要打印百分号,必须键入%%
而不是例如带有百分比的转义字符 - \%
。
来自comp.lang.c FAQ list · Question 12.6:
使用printf打印%符号很棘手的原因是%是 基本上是printf的转义字符。每当printf看到%时,它 期待跟着一个角色告诉它下一步该做什么。 双字符序列%%被定义为打印单个%。
要理解为什么\%无法正常工作,请记住反斜杠\是 编译器的转义字符,并控制编译器的解释方式 编译时的源代码字符。但是,在这种情况下,我们想要 控制printf在运行时如何解释其格式字符串。目前 就编译器而言,转义序列\%是未定义的,并且 可能导致单个%字符。这不太可能 即使是printf,也要将\和%通过printf 准备对待\特别。
所以必须键入printf("%%");
来打印单个%的原因是printf函数中定义的内容。 %是printf&的一个转义字符,而\是编译器的转义字符。
答案 2 :(得分:7)
使用"%%"
。 man page描述了这一要求:
%
写'%'。没有参数被转换。完整的转换规范为“%%
”。
答案 3 :(得分:1)
尝试以这种方式打印
printf("%%");