std :: cout每次使用时都会重新打印当前在控制台中的所有内容

时间:2016-04-21 01:56:52

标签: c++ c++11 mingw cout glfw

出于某种原因,每次使用std::cout时,都会重新打印控制台的整个内容(有点难以解释),除非我<< endl;。为了提供一些上下文,我使用glfw来支持我的Window类,它具有更高级别的std :: function回调。我的编译器是MinGW 3.21,使用的是C ++ 11 MinGW 3.21实际实现的部分。发生了什么事?

void Window::setTextCallback(std::function<void(char text)> callback) {
    textCallback = callback;
    auto onText = [](GLFWwindow* window, unsigned int text, int mods) {
        Window* win = reinterpret_cast<Window*>(glfwGetWindowUserPointer(window));
        win->textCallback(static_cast<char>(text));
    };
    glfwSetCharModsCallback(window, onText);
}

然后在main.cpp ...

Window w;
w.setTextCallback([](char text){
    cout << text;
}

当窗口打开时,我可以说输入“asdf”。输出是“aasasdasdf”。在慢动作中,它是:“a”,“aas”,“aasasd”,aasasdasdf“。

但是,如果我将main.cpp更改为:

Window w;
w.setTextCallback([](char text){
    cout << text << endl;
}

输出结果为:
“a s
d
f“
正如所料。

没有其他线程正在使用cout,我知道因为我没有任何其他线程。这种行为不会在其他地方发生。

1 个答案:

答案 0 :(得分:0)

cout是一个缓冲区。因此,每当您<<时,您只需添加文字即可。 endl是一种刷新缓冲区的方法。如果您只想打印最后一位文本,则需要将其打开。 Try this post然后我确定您的Google搜索可以完成您可能遇到的任何问题。