//添加联系人
void addperson(addressbooks * abs)
{
//先判断通讯录存储人员个数,如果添加人满,则无法添加
if(abs->add_num == max)
{
cout << "存储人数已满,无法添加 " << endl;
}
else
{
//姓名
string name;
cout << "请输入姓名: " << endl;
cin >> name;
abs->personarray[abs->add_num].name = name;
//性别
int sex;
cout << "请输入性别: " << endl;
cout << "1 ---- 男" << endl;
cout << "2 ---- 女" << endl;
//先收集用户输入的数字,1代表男,2代表女,如果输入为1或2则存入通讯录中,否则提示输入有误重新输入
while(1)
{
cin >> sex;
if(sex == 1 || sex == 2)
{ //???不明白前面还通过指针来访问后面又通过.来访问数据
abs->personarray[abs->add_num].p_sex = sex;
break;
}
cout << "输入有误,请重新输入!" << endl;
}
}
//年龄
int age;
cout << "请输入年龄: " << endl;
cin >> age;
abs->personarray[abs->add_num].age = age;
//电话
cout << "请输入电话号码: " << endl;
string phone;
cin >> phone;
abs->personarray[abs->add_num].telephone = phone;
//家庭住址
cout << "请输入家庭住址: " << endl;
string address;
cin >> address;
abs->personarray[abs->add_num].address = address;
abs->add_num++;//每记录一个人的信息就加1
cout << "添加成功!" << endl;
cout << "Press Enter to continue...";
cin.ignore(); // 等待用户按下回车键
//system("pause");
//system("cls");//清屏
cout << "\033c" << endl;
}
在跟黑马学习到通讯录管理系统时,添加联系人时每次输出到添加成功就会无视下面的请按回车键继续这行代码而继续弹出通讯录菜单。
之后查阅chat发现是由于:
这个问题可能是由于输入缓冲区中仍然存在换行符导致的。在你输入年龄、电话号码和家庭住址时,每次输入完后按下回车键,回车键会被读取并放入输入缓冲区。当执行cin.ignore()
时,它只会忽略输入缓冲区中的第一个字符,而不是忽略整个回车键。因此,第一个字符被忽略后,回车键仍然存在于输入缓冲区中,下次调用cin.ignore()
时会立即读取回车键,导致无法等待用户按下回车键。
为解决这个问题,你可以在调用cin.ignore()
之前添加额外的cin.ignore()
语句,以清除输入缓冲区中的残留字符,包括回车键。
而导致。
之后更改为
abs->personarray[abs->add_num].address = address;
abs->add_num++;//每记录一个人的信息就加1
cin.ignore();
cout << "添加成功!" << endl;
cout << "Press Enter to continue...";
cin.ignore(); // 等待用户按下回车键
//system("pause");
//system("cls");//清屏
cout << "\033c" << endl;
问题解决!