我有一些代码基本上是这样的
int a;
cin>>a;
if(!cin.good())
{
std::cin.clear();
std::cin.ignore(2);
// set some default value for 'a' and display some messages
}
如果我给出一个整数(如预期的那样)或者如果我尝试稍微弄乱它并给出最多 2 个字符,这就可以正常工作。例如。 'ss' ,但如果我给出 3 个字符的输入 'sss' ,最后一个 's' 不会被忽略,并被接受为我程序中的更多 cin 的输入。
在第一个 cin 发生后,有什么方法可以计算标准输入(缓冲区?)中的字符数,这样我就可以安全地忽略所有这些字符。
最佳答案
这是如何运作的?它应该忽略输入缓冲区中可用的所有内容,以防止稍后使用第三个 s
。它使用 std::basic_streambuf::in_avail
.
std::cin.ignore(std::cin.rdbuf()->in_avail());
如果这不起作用,您可以尝试忽略直到换行。
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
关于c++ - 执行 cin 后计算标准输入中的字符数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12242078/