gpt4 book ai didi

c++ - 如何清除输入流缓冲区

转载 作者:行者123 更新时间:2023-12-02 10:28:06 26 4
gpt4 key购买 nike

我需要从输入中获取一个整数。
我写了代码:

int price;
srand((unsigned)time(NULL));
price = rand() % 1000 + 1;
int i;
cout << "Please guess the price(1--1000):" << endl;
cin >> i;
while (cin.fail()) {
cerr << "error"<<endl;
fflush(stdin);
//cin.clear();
//cin.ignore(numeric_limits<std::streamsize>::max());
//cin.get();
cin >> i;
}
我尝试了很多方法,但是如果输入字符 e,结果是:
e
error
error
error
error
error
error
error
error
error
error
error
error
error
error
error
error
error
error
我很困惑,谢谢您的帮助。

最佳答案

当用户输入非整数的内容时,cin.fail()将返回true,而while循环将无限期地继续,并显示消息错误,就像您在控制台窗口上看到的那样。
但是,当您使用cin.clear();时,它将清除cin上的错误标志。这样将来的输入将起作用。 cin.clear()将使状态恢复到良好状态。
同样,您甚至不必在自己的情况下使用cin.fail()
您可以改为执行以下操作:

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{


int price;
srand((unsigned)time(NULL));
price = rand() % 1000 + 1;
int i;

cout << "Please guess the price(1--1000):" << endl;
cin >> i;

while (!(cin >> i))
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Please guess the price(1--1000):";

}
return 0;
}

关于c++ - 如何清除输入流缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63421879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com