c++ - 读取char后如何清除cin缓冲区

标签 c++ linux unix stream istream

我有一个问题。首先,我需要从用户输入中读取一个字符,然后我需要读取整数。问题是,如果我在第一个 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_availnumeric_limits)。 以下输入操作的一致性(不会读取超过“分隔符 (\n)”的内容,或在缓冲区中留下字符)。 由 C++ 语言律师 Robert Johnson 博士推荐。

关于c++ - 读取char后如何清除cin缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27256799/

相关文章:

c++ - 如何在 Qt 中输出这个 24 位图像

Python 子进程向我的 shell 参数添加额外的引号

c++ - 如何检查 Linux 操作系统中使用的 C++ 版本?

java - é 未正确解析

c - 以原子方式更改文件的属性

c++ - 如何将范围存储为类中的字段?

c++ - 在递归函数中存储堆栈

c++ - C++ 中的最新调用

unix - ldd 是否显示所有递归依赖项

linux - unix bash 查找具有 2 个显式文件扩展名的文件目录