为什么程序不执行最终的printf语句?

时间:2012-06-30 21:26:07

标签: c for-loop terminal while-loop printf

我无法弄清楚为什么程序控制没有到达第三个printf,就在for循环之后。

为什么不打印第三个printf

如果我将for循环更改为while循环,它仍然无法打印。

这是程序和输出:

main()
{
    double nc;

    printf ("Why does this work, nc = %f\n", nc);
    for (nc = 0; getchar() != EOF; ++nc)
    {
        printf ("%.0f\n", nc);
    }
    printf ("Why does this work, nc = %f", nc);
}

输出结果为:

Why does this work, nc = 0.000000
test
0
1
2
3
4

2 个答案:

答案 0 :(得分:4)

它适用于我,你是如何试图终止程序的? for - 循环应在EOF检测为getchar()作为输入后结束。

Windows下的

EOF Control-Z^Z)和Linux / Unix下的Control-D^D)。一旦我输入,循环终止,我得到最后的printf()以显示其输出。

作为最后一点(正如@DanielFisher所提到的那样),在最后'\n'次呼叫结束时添加printf(),因为您的特定实施可能需要这样做,否则该计划的行为可能会未定义(感谢@KeithThompson和@AndreyT在评论中指出这一点):

 printf ("Why does this work, nc = %f\n", nc);

答案 1 :(得分:0)

printf被缓冲,这就是为什么不显示最后一行 的原因。 这意味着对printf的调用可能不会导致直接输出,因为函数在将数据放入输出(您的终端)之前会累积数据。

在您的上一次printf之后调用fflush会将保留在缓冲区中的所有内容放入终端。此外,每次请求换行时都会刷新缓冲区。