2012-10-03 72 views
-1

解释为什么输出10会出现?解释为什么输出10会出现在c程序中

main() 
{ 

    for(printf("1");!printf("0");printf("2")) 
    { 
    printf("hello"); 
    } 
} 

输出:

10 
+3

阅读关于(;;)如何工作的信息。谷歌提出的[第一个链接](http://cprogramminglanguage.net/c-for-loop-statement.aspx)是合理的。 –

+0

想想for循环是由哪些部分组成的,以及'!printf()'的计算结果。 – chris

+3

我没有回答这个问题,但我不明白你为什么这么问。如果你找不到(也就是寻找和搜索)答案,你就不应该编程并做一些其他事情。你的老师可能想要锻炼你的技能(所以要求帮助会适得其反)。 –

回答

5

据其printf(3)手册页,所述printf函数返回

打印的字符的数目(不包括用于结束输出为字符串的空字节)

所以, for的初始化部分运行一次:printf("1");它将1字符放入stdout的缓冲区中。然后评估条件!printf("0");,因为printf("0")被评估,它将0字符放入stdout的缓冲区中并返回输出字符的数量,即1,因此条件为假,并且存在for循环。

最后,main正在退出程序,那时只有stdout缓冲区被刷新。

要迂回,您的程序会出现不同的行为,因为不太可能的原因,stdout无法成功写入。

0

因为在printf(“1”)它会按原样执行语句。 然后printf(“0”)在屏幕上打印0并返回值1.当您否定它时,它会在C中给出一个等于false的值,以便for循环满足其结束条件并退出。