解释为什么输出10将进入c程序

时间:2012-10-03 05:10:16

标签: c

解释为什么输出10会来?

main()
{

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

输出:

10 

2 个答案:

答案 0 :(得分:5)

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

  

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

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

最后,main退出程序,那时只刷新stdout个缓冲区。

为了迂腐,当出于不太可能的原因,stdout无法成功写入时,您的程序会有不同的行为。

答案 1 :(得分:0)

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