出于某种原因,每次使用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
,我知道因为我没有任何其他线程。这种行为不会在其他地方发生。
答案 0 :(得分:0)
cout
是一个缓冲区。因此,每当您<<
时,您只需添加文字即可。 endl
是一种刷新缓冲区的方法。如果您只想打印最后一位文本,则需要将其打开。 Try this post然后我确定您的Google搜索可以完成您可能遇到的任何问题。