尝试写通讯录管理系统时出现了问题,请先看如下代码
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的项里然后报错。(如下图)
从下午折腾到现在了,请大家帮帮我(哭
问题一:输入流 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;
}