C++ 如何在读取字符后清除cin缓冲区
我有一个问题。首先我需要从用户输入中读取一个字符,然后我需要读取整数。问题是,如果我在第一个cin上输入多个字符,它不会请求输入整数值。 下面是我的代码片段。 是否有复位或清除cin缓冲区的功能。 我是新手,如果这个问题很愚蠢,我很抱歉。谢谢C++ 如何在读取字符后清除cin缓冲区,c++,linux,unix,stream,istream,C++,Linux,Unix,Stream,Istream,我有一个问题。首先我需要从用户输入中读取一个字符,然后我需要读取整数。问题是,如果我在第一个cin上输入多个字符,它不会请求输入整数值。 下面是我的代码片段。 是否有复位或清除cin缓冲区的功能。 我是新手,如果这个问题很愚蠢,我很抱歉。谢谢 int *i = new int; int *c = new char; std::cin >> *c; std::cin >> *i; 我不知道你为什么在这里创建指针。我也不知道,在尝试为int*分配字符时,您是如何避免编译器错
int *i = new int;
int *c = new char;
std::cin >> *c;
std::cin >> *i;
我不知道你为什么在这里创建指针。我也不知道,在尝试为int*分配字符时,您是如何避免编译器错误的。如果需要读入int和char,请执行以下操作:
int i;
char c;
std::cin >> i;
std::cin >> c;
在评论中建议类似Zeta,听起来你可能需要在C++上做一些阅读。希望这有帮助。你问:
是否有复位或清除cin缓冲区的功能
有。在给定的链接中有一个示例代码,说明了如何使用该函数
在你的情况下,我看到如下情况:
int i;
int c;
std::cin >> c;
std::cin >> i;
if (std::cin.bad()) {
std::cin.clear(); // unset failbit
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // skip bad input
std::cin >> i;
}
这是一个极其简单的问题,似乎没有人知道如何正确处理。最有效的方法是使用输入缓冲区中的确切字符数调用ignore
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.
出于以下几个原因,这是最好的答案:
不包括笨重的。
没有巨数处理。
所需的操作更接近输入缓冲区的可用性与数值限制。
以下输入操作中的一致性不会读取超过分隔符的内容,或在缓冲区中保留字符。
由C++语言的律师罗伯特·约翰逊博士推荐。不过,我强烈建议你买本书。至少再过一个月,忘掉新的。谢谢你的编辑,埃里克森先生。论坛新手,不是编码新手,无论如何,再次感谢你。如果它“如预期”工作,这将是非常好的,但由于:在许多std库中实现了avail,它将只返回0,这显然仍然是一个一致的实现。原因是rdbuff是一种访问cin的streambuf*成员的方法,cin是一个istream对象。您尚未在中阅读任何内容,因此在调用时in_avail返回零。