我有一个问题。首先,我需要从用户输入中读取一个字符,然后我需要读取整数。问题是如果我在第一个cin上输入多个char,它就不会请求输入整数值。
这是我的代码片段
是否有任何功能可以重置或清除cin的缓冲区
我是新手,对不起,如果这个问题很愚蠢。感谢。
int *i = new int;
int *c = new char;
std::cin >> *c;
std::cin >> *i;
答案 0 :(得分:0)
你问:
是否有任何重置或清除cin缓冲区的功能。
有std::istream::ignore()
。给定链接上有示例代码,显示如何使用该函数。
在你的情况下,我看到类似的东西:
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;
}
答案 1 :(得分:0)
这是一个非常简单的问题,似乎没有人知道如何正确地做。最有效和最有效的方法是使用输入缓冲区中的确切字符数调用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.
这是最好的答案,原因如下:
没有笨重的包括。
没有巨大的数字处理。
靠近输入缓冲区的所需操作(in_avail
与numeric_limits
)。
以下输入操作的一致性(不会读取&#34;分隔符(\n
)&#34;或将字符留在缓冲区中)。
由c ++语言律师Robert Johnson博士推荐。
答案 2 :(得分:-1)
我不确定你为什么在这里创建指针。我也不知道你是如何因尝试为char
分配int*
而导致编译错误的。如果需要读入int和char,请执行以下操作:
int i;
char c;
std::cin >> i;
std::cin >> c;
与评论中推荐的Zeta一样,听起来您可能需要对C ++进行一些阅读。希望这会有所帮助。