我正在为一个类(class)写一个基于文本的游戏,在这个问题之前我已经运行了大部分游戏。
我今天打开它并尝试构建/运行它,它构建成功并且似乎正在运行,但是第一行代码中的一些是输出到控制台的,直到我输入一些东西它们才会发生进入控制台,在打印提示之前不需要这样做:
这是我主要的开始:
int main() {
string name;
cout << fixed << setprecision(2) << "What's your name? ";
cin >> name;
cin.ignore(INT_MAX, '\n');...
这是输出(在我输入 HELP? 并按下 enter 之前什么都没有)
HELP?
What's your name?
===========================================================
| Welcome, HELP?! |
===========================================================
而在今天之前,当我运行它时,它会输出“你叫什么名字?”,此时我会输入我的名字,然后它会打印欢迎信息。
我觉得它一定很简单,因为它对我来说是如此黑白分明:为什么它会等待任何输入,而实际上我要求它的第一个真实的事情就是向控制台输出一些东西?即使我将 cout 语句作为第一件事,它也会以这种方式工作。这是 XCode 问题吗?
注意:对于文件中的每个 cin,它也像这样处理输入,在我输入内容之前,问题和提示不会打印出来。
最佳答案
在 C++ 中写入 std::ostream
时,您必须在任何内容实际打印到控制台之前刷新缓冲区。您可以使用 std::endl
或 std::flush
执行此操作。
参见 std::ostream
引用 here .
例子:
#include <iostream>
#include <string>
int main() {
std::string s;
std::cout << "Flushed with a line break." << std::endl;
std::cin >> s;
std::cout << "Flushed with no line break." << std::flush;
std::cin >> s;
return 0;
}
关于在我向控制台输入内容之前,C++ 程序 (XCode) 不会运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43108336/