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

Clear entire line from cin instead of one character at a time when the user enters bad input

本文关键字:输入 字符 一个 清除 错误 用户 cin 一次      更新时间:2023-10-16

我对 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;
}
我认为

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

#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;
}

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