解释为什么输出 10 会来?
main()
{
for(printf("1");!printf("0");printf("2"))
{
printf("hello");
}
}
输出:
10
解释为什么输出 10 会来?
main()
{
for(printf("1");!printf("0");printf("2"))
{
printf("hello");
}
}
输出:
10
根据其printf(3)手册页,该printf函数返回
打印的字符数(不包括用于结束输出到字符串的空字节)
所以,初始化部分for运行一次printf("1"):它将1字符放入stdout. 然后评估条件,!printf("0");因为printf("0")评估后,它将0字符放入缓冲区stdout并返回输出字符的数量,即1条件为假,for循环存在。
最后,main正在退出程序,当时只有stdout缓冲区被刷新。
stdout为了迂腐,当由于不太可能的原因无法成功编写时,您的程序将具有不同的行为。
因为在 printf("1") 它按原样执行语句。然后 printf("0") 在屏幕上打印 0 并返回一个值 1。当你否定它时,它在 C 中给出一个等于 false 的值。所以 for 循环满足其结束条件并退出。