【问题标题】:what is the exception in this code [closed]这段代码有什么异常[关闭]
【发布时间】:2013-08-06 14:24:34
【问题描述】:
int main()
{
    printf("main started");
    for(;;) {}
    return 0;
}   

问题在于它不打印“main started”。 for 循环中的内容以及循环之前有多少语句都无关紧要。

【问题讨论】:

  • 输出被缓冲。
  • 请提供更多信息。您使用什么编译器,您使用的平台是什么?
  • 当然,for 循环中的内容很重要:将return 0; 放入其中,看看会发生什么。
  • hugh,main() 是一种技术上正确的声明主入口点的方法,但请使用 'int main(){ ... return 0;}。
  • @georgesl 在当前版本的 C 和任何版本的 C++ 中,这在技术上都不正确。所以同意你的结论,使用int main() :)

标签: c


【解决方案1】:

在输出的末尾添加一个换行符。没有它,文本会进入输出缓冲区,但不会被刷新。

【讨论】:

  • 或通过fflush(stdout)强制刷新
  • 换行符不保证刷新。
  • thnx... 它正在使用“\n”,但我仍然不明白。它会正常工作,但如果永远循环在它之后,它就不会工作
  • main 退出时,输出被刷新。
【解决方案2】:

你需要刷新输出:

fflush(stdout);

或者,以\n 字符结束字符串,因为大多数系统都有行缓冲标准输出。

【讨论】:

    【解决方案3】:

    printf 仅在刷新字符串后才打印该字符串。如果您在字符串中添加\n(换行符)符号,它会自动刷新数据(虽然它通常有效,但不能保证!不要依赖它)。当程序完成时,数据也会自动刷新 - 在从主函数返回或调用 exit 之后。

    在您的情况下,由于没有条件的 for 循环,程序永远不会完成,因此永远不会调用 autoflush

    如果您仍然想刷新它,您可以调用fflush(stdout) 强制刷新自己。退出时会自动调用相同的函数。

    请参阅我之前提出的关于自动刷新的标准保证的类似问题。 Is there a guarantee of stdout auto-flush before exit? How does it work?

    【讨论】:

      【解决方案4】:

      您使用printf() 打印的内容保存在缓冲区中。这意味着它不会立即发送到您的控制台。但是,此缓冲区已被刷新:

      • 当您打印换行符 (\n) 时,
      • 如果您要求冲洗,
      • 或者当缓冲区太满时,会自动刷新。

      因此,在您的情况下,要立即查看它,请添加 fflush(stdout) 或 do printf("main started\n")

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多