如果在C++中输入的值不是整数,如何重复语句

How To Repeat Statement If Entered Value Is Not An Integer In C++

本文关键字:整数 语句 何重复 C++ 输入 如果      更新时间:2023-10-16

我是C++的新手,我正在使用Code::Blocks来运行我的代码。。。问题是,我希望用户输入一个年龄的整数值,那么我如何编码以确保程序知道它是否是整数,如果它不是整数则循环?这是代码[][1]

 #include <iostream>
 #include <iomanip>
using namespace std;
int main()
{
    int age;
    string name;
    cout << "Welcome To Maverick Academy! nWe Are Pleased To Have New Student Around The Globe. n" << endl;
    cout << "What Is Your Name, Newcomer?n";
    cin >> name;
    cout << "nHello, " << name << ". How Old Are You?n";
    cin >> age;
    do
    {
       cout << "Please Enter Your Age In Numeric. n";
    } while (cin.fail);
    {
       cin.clear();
    }
    cout << "nPlease Choose A Class." << endl;
    //printing border
    cout << setfill('-') << setw(1) << "+" << setw(15) << "-" << setw(1) << "+" << setw(15) << "-" << setw(1) << "+" << endl;
    //printing student record
    cout << setfill(' ') << setw(1) << "|" << setw(15) << left << "Classes" << setw(1) << "|" << setw(15) << left << "Advanced" << setw(1) << "|"  << setw(5) << endl;
    //printing border
    cout << setfill('-') << setw(1) << "+" << setw(15) << "-" << setw(1) << "+" << setw(15) << "-" << setw(1) << "+" << endl;
    //printing student record
    cout << setfill(' ') << setw(1) << "|" << setw(15) << left << "Mage" << setw(1) << "|" << setw(15) << left << "Sorceress" << setw(1) << "|"  << setw(5) << endl;
    //printing border
    cout << setfill('-') << setw(1) << "+" << setw(15) << "-" << setw(1) << "+" << setw(15) << "-" << setw(1) << "+" << endl;
    //printing student record`enter code here`
    cout << setfill(' ') << setw(1) << "|" << setw(15) << left << "Fighter" << setw(1) << "|" << setw(15) << left << "Warrior" << setw(1) << "|" << endl;
    //printing border
    cout << setfill('-') << setw(1) << "+" << setw(15) << "-" << setw(1) << "+" << setw(15) << "-" << setw(1) << "+" << endl;
    //printing student record
    cout << setfill(' ') << setw(1) << "|" << setw(15) << left << "Ninja" << setw(1) << "|" << setw(15) << left << "Assassin" << setw(1) << "|"  << setw(5) << endl;
    //printing border
    cout << setfill('-') << setw(1) << "+" << setw(15) << "-" << setw(1) << "+" << setw(15) << "-" << setw(1) << "+" << endl;
    return 0;
}

我很确定问题出在do while循环中。

int age;
do {
    if(cin.fail()){
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), 'n');
    }    
    cout << "Please Enter Your Age In Numeric. n";
    cin >> age;
} while(cin.fail());

应该有效。它至少运行一次循环(do)并不断重复(清除cin并提示用户输入),直到cin.fail()为false,这时您就知道输入是有效的。

为了澄清,如果输入无效(例如,输入不适合变量类型),那么cin.fail()将返回true,因此流被破坏(这就是调用cin.clear()很重要的原因)。

同样值得注意的是,cin.fail后面需要括号,因为它是一个方法调用。这可能会让您更深入地了解cin、cin.fail()和cin.clear()是如何工作的。