当用户输入错误输入时,一次从cin清除整行而不是一个字符

时间:2015-01-19 18:33:53

标签: c++ loops cin

我对cin的一些命令有疑问。我对c ++还很新,所以请耐心等待。

我正在做一个简单的计算程序,用户输入一个值,程序用输入进行计算。我试图创建一个检查输入的循环,以确保用户输入和编号。经过一些研究后,我发现使用cin.clearcin.ignore将清除先前的输入,因此用户可以在循环检查后输入新值,以查看它是否不是数字。它运行良好,除非用户输入大于1个字母的单词。然后它循环并逐个删除每个字母,直到清除前一个cin。有没有办法删除整个单词而不是一次删除一个字符?我觉得我错误地解释了cin命令实际上做了什么。

以下是相关代码:

//Ask the user to input the base
cout << "Please enter the Base of the triangle" << endl;
cin >> base;

//A loop to ensure the user is entering a numarical value
while(!cin){

    //Clear the previous cin input to prevent a looping error
    cin.clear();
    cin.ignore();
    //Display command if input isn't a number 
        cout << "Not a number. Please enter the Base of the triangle" << endl;
        cin >> base;
}

1 个答案:

答案 0 :(得分:1)

我认为你可以在网上以多种方式得到答案。这对我有用:

#include <iostream>
#include <limits>

using namespace std;

int main() {
    double a;
    while (!(cin >> a)) {
        cin.clear();
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        cout << "Wrong input, retry!" << endl;
    }
    cout << a;
}

此示例比注释中链接的示例更简单,因为您期望来自用户的输入,每行一个输入。