2011-04-05 106 views
0

可能重复:
C output question…C的输出的问题

为什么其O/P是%% ??

int main(void) 
{ 
    printf("%%%\n"); 
    return 0; 
} 

虽然下面的程序o/p是%?

int main(void) 
{ 
    printf("%%%"); 
    return 0; 
} 

可以告诉我实际的区别在哪里?

+2

当你运行它会发生什么? – David 2011-04-05 12:31:32

+2

你有没有想过自己尝试一下? – Chris 2011-04-05 12:31:57

+0

您是否想过阅读您正在使用的功能的文档? – DevSolar 2011-04-05 12:32:49

回答

4

这是未定义的行为。 C99州的第7.19.6.1/9条规定:

如果转换规范无效,则行为未定义。

并且前面的部分都没有允许空格的转换说明符。它们仅限于来自集合diouxXfFeEgGaAcsPn%的字符。

+0

空格是转换说明符的有效修饰符,但'%'在说明符中不是有效的下一个字符。 – 2011-04-05 13:42:39

+0

@R:是的,该空格对于有符号转换是一个有效的修饰符,但正如您所说,'%'不是一个有符号转换。我认为标准中的一个段落说'%%'必须是_exactly_这种形式(不允许修饰符)。 – paxdiablo 2011-04-06 00:07:19