printf的输出

时间:2013-12-02 13:37:04

标签: c printf

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

上述程序的输出是%%%,怎么回事?

3 个答案:

答案 0 :(得分:1)

这很简单,因为标准说:

  

4每个转换规范由字符%引入。在%之后,以下   按顺序出现:

[...]

  

8转换说明符及其含义为:

[...]

  

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

(来自ISO / IEC 9899:TC3 - &gt;§7.19.6.1库)

答案 1 :(得分:1)

您有未指定的行为。你有5%的格式字符串。 A%之后是格式字符,它控制printf对其参数执行的操作。所以第一个%后跟另一个%,printf输出为%。同样是第3和第4%。

但是,第5%后面跟一个空字节。并引用printf的手册页:

  

如果格式操作数中的字符序列以'%'开头   字符,但不形成有效的转换规范,   行为未指明。

因此它可以打印%,不打印,崩溃,......

答案 2 :(得分:0)

这取决于编译器/平台...您使用<conio.h>的事实告诉我您在DOS / Windows平台上。

在Linux方面,我只是简单地将“%%”作为输出。

PS:请参阅What are the different valid prototypes of 'main' function?