-5
int main()
{
    printf("main started");
    for(;;) {}
    return 0;
}   

问题是它不打印“主要启动”。for 循环中的内容以及循环之前有多少语句都无关紧要。

4

4 回答 4

2

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

于 2013-08-06T14:25:46.407 回答
2

您需要刷新输出:

fflush(stdout);

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

于 2013-08-06T14:25:49.583 回答
1

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

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

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

于 2013-08-06T14:27:46.780 回答
1

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

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

如果你想冲洗它,你可以强制冲洗自己打电话fflush(stdout)。退出时会自动调用相同的函数。

请参阅我之前提出的关于自动刷新的标准保证的类似问题。退出前是否保证标准输出自动刷新?它是如何工作的?

于 2013-08-06T14:26:23.163 回答