运行出现了两个问题,请问如何解决?

尝试写通讯录管理系统时出现了问题,请先看如下代码

void addPerson(AddressBooks* abs) //添加联系人函数
{
    if (abs->members == MAX)
    {
        cout << "联系人数量已达上限!" << endl;
        return;
    }
    else
    {
        //name
        string input_name;
        cout << "请输入姓名:" << endl;
        cin >> input_name;
        abs->PersonArray[abs->members].name = input_name;

        //sex
        int input_sex = 0;
        cout << "请输入性别:" << endl;
        cout << "1--男" << endl;
        cout << "2--女" << endl;
        while (true)
        {
            cin >> input_sex;
            if (input_sex == 1 || input_sex == 2)
            {
                abs->PersonArray[abs->members].sex = input_sex;
                break;
            }
            cout << "输入错误,请重新输入。" << endl;
        }

        //age
        cout << "请输入年龄:" << endl;
        int input_age;
        cin >> input_age;
        abs->PersonArray[abs->members].age = input_age;

        //phone number
        string input_phone = 0;
        cout << "请输入电话号码:" << endl;
        cin >> input_phone;
        abs->PersonArray[abs->members].PhoneNumber = input_phone;

        //address
        string input_addr;
        cout << "请输入地址:" << endl;
        cin >> input_addr;
        abs->PersonArray[abs->members].address = input_addr;

        abs->members++;
        cout << "添加联系人成功!" << endl;
        system("pause");
        system("cls");
    }
}

这边运行后有两个问题:
一是在输入性别时如果输入了非数字字符就会无限打印"输入错误,请重新输入。"
二是在输入年龄是会直接跳到一个叫xstring的项里然后报错。(如下图)
从下午折腾到现在了,请大家帮帮我(哭

img

问题一:输入流 cin 在读取到非数字时会进入错误状态,此时输入流不会读取任何数据并且后续的读取操作也会失败。因此无限打印"输入错误,请重新输入。"

    while (true)
    {
        cin >> input_sex;
        if (cin.fail() || (input_sex != 1 && input_sex != 2)) {
            cout << "输入错误,请重新输入。" << endl;
            cin.clear();    // 清除错误状态
            cin.ignore(numeric_limits<streamsize>::max(), '\n');    // 忽略当前输入行,需要#include <limits>
        } else
        {
            abs->PersonArray[abs->members].sex = input_sex;
            break;
        }
    }

问题二:要看你程序age相关的定义部分。或者试试 string input_age; age应该和sex一样。实在不行,定义成string试试


int a = -1;
    
    while (true) {
        cout << "input a:";
        while (!(cin >> a)) {
            cout << "input a:";
            cin.clear();
            while (cin.get() != '\n') {
                continue;
            }
        }
        if (a == 1 || a == 2)
            break;
        
    }