我制作了很多简单的控制台 C++ 应用程序,我面临的一个问题是输入缓冲区。我试过 cin.ignore 和 flush(),但它们似乎对我不起作用。
如果我有这样的代码:
cin >> char1;
cin >> char2;
然后我按:1(空格)2(回车),只需一次回车,1 将存储到 char1,2 将存储到 char2。
对不起,如果我对我的问题有点模糊。如果人们不明白,我会尝试编辑这个问题。
最佳答案
你可以使用 getline立即阅读整行,然后 std::string at如果您需要第一个字符,或者如果您需要第一个数字,请使用 isstringstream
。
char char1;
std::string input;
getline(std::cin, input);
if (!std::cin.good()) {
// could not read a line from stdin, handle this condition
}
std::istringstream is(input);
is >> char1;
if (!is.good()) {
// input was empty or started with whitespace, handle that
}
如果您经常这样做,请将其包装在一个函数中。在上面,如果你直接按回车键(没有输入任何字符),或者如果你输入以空格开头的数据,is
将是 !good()
所以 char1
不会被设置。
或者,在检查完 cin
仍然正常之后,您可以简单地:
if (input.empty()) {
// empty line entered, deal with this
}
char1 = input.at(0);
这样,如果字符串不为空,char1
将被设置为第一个 char
if input
,不管它是什么 (包括空格)。
注意:
is >> char1;
只会读取第一个字符,而不是第一个数字(与 input.at()
版本相同)。因此,如果输入是 123 qze
,char1
将收到 '1'
(ASCII 为 0x31),而不是值 123。不确定是否是你想要的还是不想要的。如果这不是您想要的,请读取一个 int
变量,然后正确转换。
关于c++ - 如何清除 C++ 应用程序中的输入缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7055183/