繁体   English   中英

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

[英]Why does program not execute final printf statement?

我无法弄清楚为什么在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

对我来说效果很好,您打算如何终止该程序? 一旦getchar() EOF检测为输入,则for循环应结束。

EOF在Windows下是Control-Z^Z ),在Linux / Unix下是Control-D^D )。 输入此内容后,循环终止,并得到最终的printf()以显示其输出。

作为最后的说明(如@DanielFisher所述),在最终的printf()调用的末尾添加一个'\\n' ,因为您的特定实现可能会要求它,否则程序的行为可能是不确定的(感谢@ KeithThompson和@AndreyT在评论中指出了这一点):

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM