为什么printf(“%%”)只打印百分之一(%)符号?

时间:2014-08-28 06:07:41

标签: c printf stdio

当我按照代码运行时:

#include<stdio.h>
#include<conio.h>
void main(){
clrscr();
printf("%%");
getch();
}

我得%%作为输出?

这种逻辑背后可能是什么原因?

4 个答案:

答案 0 :(得分:4)

这就是printf的作用:它是打印格式化的(f表示格式化)。它使用%作为格式化字符。它是唯一的保留字符,需要进行转义才能表示自己,即%%。有关格式http://www.cplusplus.com/reference/cstdio/printf/的更多信息,请参阅手册。

P.S。永远不要将不属于程序一部分的字符串作为第一个参数。要打印由用户输入的字符串msg,请执行printf(%s,msg);,否则您的代码中将出现安全漏洞。

答案 1 :(得分:1)

来自标准ISO / IEC 9899:1999(E)

7.19.6.1

每个转换规范都由字符%。

引入

转换说明符及其含义为:

% - 写入%字符。没有参数被转换。完整的  转换规范应为%%。

答案 2 :(得分:1)

对于C printf,%是一个特殊字符,通常表示在该位置替换的参数:printf("Hello, %s!\n", "world!");导致&#34; Hello,world&#34;。根据您要输出的数据,您可以在%之后添加许多不同的内容。这就留下了问题&#34;如果我想打印一个百分号符号&#34;?

解决方案:使用%%

特殊转义字符\也是如此。 &#34; \ n&#34;意味着打印一个新行。如果要实际打印正斜杠,则必须将其放置两次\\

请参阅Printf format stringMSDN

答案 3 :(得分:1)

%进入格式说明符。 例子。 当我们写printf("%d",20);时,它会打印20而不是%d。因为编译器将%视为格式说明符。在编译器的思想中,%的含义有点特殊。 所以,如果你想要&#34;%&#34;应该是输出,然后你必须写printf("%%")。这里第一个%符号将禁止%格式说明符的含义,并将%作为输出打印。