为何sleep函数未在cout输出后等待,而是先等待再批量输出内容?
问题原因及解决办法
这是因为C++标准输出流cout默认采用行缓冲机制:
- 当输出内容里没有换行符
\n,且缓冲区未被填满时,输出内容会暂时存在内存缓冲区中,不会立刻显示到控制台。 - 你的代码里
cout<<"Hello World";执行后,字符串还在缓冲区里没输出,紧接着就进入了sleep(2.0)的等待。等sleep结束后,程序即将退出,系统会自动刷新输出缓冲区,所以两个字符串会一次性被打印出来。
解决方法(任选其一即可)
- 在第一个输出语句末尾加换行符,触发行缓冲自动刷新:
cout<<"Hello World\n"; sleep(2.0); cout<<" Goodbye World"; return 0;
- 手动调用刷新函数强制输出缓冲区内容:
cout<<"Hello World"<<flush; sleep(2.0); cout<<" Goodbye World"; return 0; // 或者分开写: // cout<<"Hello World"; // cout.flush();
- 使用
endl(注意:endl会同时添加换行符并刷新缓冲区,和\n+flush效果一致,但如果不需要换行的话不建议用):
cout<<"Hello World"<<endl; sleep(2.0); cout<<" Goodbye World"; return 0;
内容的提问来源于stack exchange,提问作者thepingucoderfromdiscord
相关产品推荐
相关产品推荐

