这段代码中有什么例外

时间:2013-08-06 14:24:35

标签: c

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

问题是它不打印“主要开始”。 for循环中的内容和循环之前有多少语句无关紧要。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

您需要刷新输出:

fflush(stdout);

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

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:1)

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

  • 当您打印换行符(\n)时,
  • 如果你要求同花,
  • 或缓冲区变得太满,并自动刷新。

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