c++ - 如何清除 C++ 应用程序中的输入缓冲区?

标签 c++ input

我制作了很多简单的控制台 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 qzechar1 将收到 '1'(ASCII 为 0x31),而不是值 123。不确定是否是你想要的还是不想要的。如果这不是您想要的,请读取一个 int 变量,然后正确转换。

关于c++ - 如何清除 C++ 应用程序中的输入缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7055183/

相关文章:

python - Paraview 用户输入弹出窗口

javascript - 桌面版 Internet Explorer 11 中的 Instagram 登录字段未激活

c++ - 线程池中的 boost::function 释放段错误

c++ - 在 C++ 中使用 ibpp 时从和到 void * 的无效转换

c++ - 使用 SHAppBarMessage 移动任务栏

php - 好的 PHP 验证库

java - Jsoup - 应用 <form> &lt;input&gt; 标签的搜索

javascript - jQuery 选择 onChange 更新输入字段值

c++ - C++ 中的类型转换、整数和字符

c++ - MPI_Sendrecv_replace() 死锁问题