0

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

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
4

2 回答 2

4

它对我来说很好,你是如何试图终止程序的?for-loop 应该在被EOF检测为输入时结束getchar()

EOF在 Windows 下是Control-Z( ),在 Linux/Unix 下是( )。一旦我输入这个,循环就会终止,我会得到最终的结果来显示它的输出。^ZControl-D^Dprintf()

作为最后一点(@DanielFisher 也提到过),'\n'在最后一次调用的末尾添加一个,printf()因为您的特定实现可能需要它,否则程序的行为可能是未定义的(感谢@KeithThompson 和@AndreyT 指出这一点在评论中):

 printf ("Why does this work, nc = %f\n", nc);
于 2012-06-30T21:29:10.570 回答
0

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

在你最后一次 printf 之后调用fflush将把所有剩余的东西放在终端的缓冲区中。此外,每次您要求换行时都会刷新缓冲区。

于 2012-06-30T21:59:07.230 回答