std::cout每次使用时都会重新打印控制台中当前的所有内容
std::cout re-printing everything currently in the console, each time it is used
由于某种原因,每次我使用std::cout
时,控制台的整个内容(有点难以解释)都会重新打印,除非我是<< endl;
。为了提供一些上下文,我使用glfw来支持我的Window类,它具有更高级别的std::函数回调。我的编译器是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"。输出为"aaasdasdf"。在慢动作中,它是:"a","aas","aasasd",aasasdasdf"。
但是,如果我将main.cpp
更改为:
Window w;
w.setTextCallback([](char text){
cout << text << endl;
}
输出为:
"a
s
d
f"
正如预期的那样。
没有其他线程使用cout
,我知道这一点,因为我没有任何其他线程。这种行为在其他地方不会发生。
cout
是一个缓冲区。因此,每次<<
到它时,你只是在添加文本,它就会保持不变。endl
是刷新缓冲区的一种方法。如果你只想打印你推入其中的最后一段文本,你需要从空开始。试试这篇文章,然后我相信你的谷歌搜索可以解决你可能对此有任何问题。
相关文章:
- c ++控制台应用程序,如何在控制台外部打印字符
- 控制台打印时间功能产生1
- 如何通过按 F2 或 F3 等键使控制台打印某些内容
- cout 不打印任何内容到控制台
- 如何在 C++ 中将 U32 字符串和 U16string 打印到控制台
- 打印到文件和控制台 C++
- 在 c++ 中打印到控制台的最佳方式是什么?
- 我的控制台正在打印随机单词以及没有执行正确的数学运算
- C++控制台打印在同一行上,带回车符
- 硬编码字符串与强制转换为 PUCHAR 并打印到控制台时从控制台读取的字符串的结果不同
- V8 控制台.log不打印
- 使用 C++ shell 为 C++ 中的 2 D 动态数组赋值,控制台不会打印出任何内容
- cURL 保持打印传输到控制台?
- SDL 未打印到控制台
- qDebug() 在升级到 ubuntu 17.10(和 Fedora)后停止工作(不再打印到控制台)
- 使用具有 UTF8 编码的源文件将 UTF8 符号打印到 Windows 控制台
- Eclipse C 控制台打印订单Linux
- 基本的控制台打印程序
- istream导致控制台打印加倍
- 使用 Libtcod,如何控制台>打印具有动态颜色量的字符串?