While循环中的计数奇怪的行为

Cout in While loop Strange behaviour

本文关键字:循环 While      更新时间:2023-10-16

我的代码如下

int i=0;
while(i<10){
cout<<"Hello";
sleep(1);
i++
}

在Windows中,代码在每个循环上打印,但在Linux中,它在退出while循环后打印所有内容。如果我把endl放在cout的最后,那么它会在每个循环中打印。为什么会这样?有人能解释这种行为吗?

尝试使用cout.flush();也许这两个操作系统在缓冲标准输出方面有不同的策略。

出于效率的考虑,有时标准流将使用缓冲区实现。进行大量微小的写操作可能很慢,因此它会将您的写操作存储起来,直到它获得一定数量的数据,然后再一次将其全部写出来。

Endl强制它写出当前缓冲区,因此您将立即看到输出。

#include <iostream>
using namespace std;
int main()
{
    int i = 0;
    while(i < 10){
        cout << "Hello" << endl;
        sleep(1);
        ++i;
    }
}