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

原文 标签 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;

}

最佳答案

我很确定问题出在您的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()的工作方式有更多的了解。

关于c++ - 如果输入的值不是整数,如何在C++中重复语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33711607/

相关文章:

c++ - C++类型 “SnakeHead(*)()”的值不能用于初始化 “SnakeHead*”类型的实体

c++ - 为什么 "class"中有 "template <class x>"?

c++ - 创建独立 exe (Forms) (C++) 的最佳方式

c++ - C++读取上一个函数堆栈框架

c++ - Xlib测试窗口名称

c++ - 这个 "trick"跨 DLL 边界抛出异常是一个坏主意吗?

c++ - 两次设置QApplication::style后程序崩溃

c++ - 如何将任何化合物还原为非化合物类型

c++ - glm设置对象位置

c++ - 默认模板类参数混淆了 g++?