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

时间:2015-11-14 18:05:19

标签: c++

我是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;

}

1 个答案:

答案 0 :(得分:1)

我很确定问题出在你的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之后你需要括号,因为它是一个方法调用。 This或许可以为您提供有关cin,cin.fail()和cin.clear()如何工作的更多信息。