如何手动刷新缓冲区?

时间:2021-06-19 06:36:48

标签: c++ buffer flags flush manipulators

this is same Question 但没有正确回答。

代码

#include<iostream>
int main()
{
    char ch='a';
    std::cout<<ch;
}

输出

a

所以这里输出流中只有一个字符导致缓冲区。所以缓冲区未满仍然在屏幕上显示输出。表示缓冲区会自动刷新。

所以请举例说明缓冲区不会自动刷新,我们必须使用操纵符标志 flush

1 个答案:

答案 0 :(得分:1)

您可以通过在输出之间休眠来查看您的流是否被缓冲,例如:

#include <iostream>
#include <thread>

int main()
{
    for (int i = 0; i < 50; i++)
    {
        char ch = 'a';
        std::cout << ch << "\n";
        std::this_thread::sleep_for(std::chrono::milliseconds(500));
    }
}

在某些平台上,您可能需要通过调用 setvbufstdout 上启用缓冲:

std::setvbuf(stdout, nullptr, _IOFBF, BUFSIZ);