我有一个问题。首先,我需要从用户输入中读取一个字符,然后我需要读取整数。问题是,如果我在第一个 cin 上输入多个字符,它不会要求输入整数值。
这是我的代码片段。
有没有重置或清除cin缓冲区的功能。
我是新手,如果这个问题很愚蠢,我很抱歉。谢谢。
int *i = new int;
int *c = new char;
std::cin >> *c;
std::cin >> *i;
最佳答案
这是极其简单的问题之一,似乎没有人知道如何正确解决。最有效和高效的方法是使用输入缓冲区中的确切字符数调用忽略。
cin.clear(); //clear errors/bad flags on cin
cin.ignore(cin.rdbuf()->in_avail(), '\n');//precise amount of ignoring
cin.rdbuf()->in_avail() //returns the exact number of characters in the cin buffer.
出于以下几个原因,这是最佳答案:
没有笨重的内容。
没有巨数处理。
所需的操作更接近输入缓冲区(in_avail
与 numeric_limits
)。
以下输入操作的一致性(不会读取超过“分隔符 (\n
)”的内容,或在缓冲区中留下字符)。
由 C++ 语言律师 Robert Johnson 博士推荐。
关于c++ - 读取char后如何清除cin缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27256799/