首页 > 解决方案 > 如何清除输入流缓冲区

问题描述

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

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

我很困惑,谢谢你的帮助。

标签: c++

解决方案


当用户输入除整数以外的内容时,thencin.fail()将返回true,while 循环将无限期地继续,并出现您在控制台窗口中看到的消息错误。

但是,当您使用cin.clear();它时,会清除cin. 这样未来的输入就会起作用。cin.clear()将状态恢复到goodbit

此外,您甚至不必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;
}

推荐阅读