C++通讯录最新版期末不挂科系列
Posted 肥学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++通讯录最新版期末不挂科系列相关的知识,希望对你有一定的参考价值。
目录标题
简单说一下
此次没有什么华丽的外表,就是用c++来写的简单的通讯录管理系统,是在上次结构体联系总结之后写的,因为有一点python和Java的基础,在学完基础语法后也是很快写出来了。有需要的小伙伴可以看看或者说指导指导,谢谢了
效果演示
源码
部分源码展示
主菜单
void menu()
cout << "\\n\\n*****************主菜单************************" << endl;
cout << "****************当前通讯录人数" <<pernum<<"****************"<< endl;
cout << "****** 1.添加联系人信息" << endl;
cout << "****** 2.显示所有联系人" << endl;
cout << "****** 3.删除联系人信息" << endl;
cout << "****** 4.查找联系人信息" << endl;
cout << "****** 5.修改联系人信息" << endl;
cout << "****** 6.清空所有联系人" << endl;
cout << "****** 7.退出" << endl;
防止不按规定输入函数
//确认用来防止不按照提示输入
void confirm(int* flag)
cout << "是否确认删除(按1确定0取消):" << endl;
while (1) //判定是否为合法输入
cin >> *flag;
if (*flag == 1 || *flag == 0)
break;
cout << "输入错误,请继续输入(按1确定0取消):" << endl;
添加联系人
//添加联系人
void addPerson(P* perArr )
P p;
//cin.get();
cout << "请输入姓名:";
getline(cin,p.name);
cout << "请输入性别:";
getline(cin,p.sex);
cout << "请输入手机号:";
getline(cin, p.phone);
cout << "请输入家庭地址:";
getline(cin,p.address);
perArr[pernum] = p;
pernum++;
cout<<"添加成功!"<<endl;
删除联系人
//删除联系人
void deletePerson(P* perArr)
string tempName;
int i,flag;
cout << "请输入要删除的联系人的姓名:" << endl;
getline(cin, tempName);
i=isExit(perArr, tempName);
if (i >=0) //如果查到了
cout << "该联系人信息为:" << endl;
cout << "姓名:" << perArr[i].name << "\\t性别:" << perArr[i].sex << "\\t手机号:" << perArr[i].phone << "\\t家庭住址:" << perArr[i].address << endl;
confirm(&flag);
if (flag == 1)
for (int j = i; j < pernum-1; j++)
perArr[j] = perArr[j +1];
pernum--;
cout << "删除成功!" << endl;
else
error();
修改联系人信息
//修改联系人
void updataPer(P* perArr)
string tempName;
int i, flag;
cout << "请输入要修改的联系人姓名:" << endl;
getline(cin, tempName);
i = isExit(perArr, tempName);
cout << "要查找的联系人信息为:" << endl;
cout << "姓名:" << perArr[i].name << "\\t性别:" << perArr[i].sex << "\\t手机号:" << perArr[i].phone << "\\t家庭住址:" << perArr[i].address << endl;
confirm(&flag);
if (i >=0&&flag==1)
cout << "请重新输入该联系人信息" << endl;
P p;
//cin.get();
cout << "请输入姓名:";
getline(cin, p.name);
cout << "请输入性别:";
getline(cin, p.sex);
cout << "请输入手机号:";
getline(cin, p.phone);
cout << "请输入家庭地址:";
getline(cin, p.address);
perArr[i] = p;
cout << "修改成功!" << endl;
else
error();
途中解决的问题
while陷入死循环跳过cin
的问题
cin 该对象控制从标准输入中以字节流形式进行的提取。构造对象后,调用cin.tie()返回&cout。
因为cin是一个输入流,当要求给一个整型赋值的时候,输入的类型可能与该整型不匹配,导致缓存溢出。如果输入的过多了,那么,那些输入除了一部分赋值给变量以外还有剩余的字节,这些剩余的输入将残留在输入缓存中,就会导致在下面需要输入的时候不再接受输入,而直接从缓存中获得。
解决办法是两个
- 一个清除cin缓存区。
//清除输入缓冲区的当前行
cin.ignore(numeric_limits<std::streamsize>::max(),'\\n');
//清除输入缓冲区里所有内容
cin.ignore(numeric_limits<std::streamsize>::max());
//清除一个字符
cin.ignore()
- 另一个是把cin换成getline这样可以来接收string类型的数据就不会出现溢出了。
点击直接资料领取
源码可在下方获取
这里有python,Java等学习资料还有有有趣好玩的编程项目,更有难寻的各种资源。反正看看也不亏。
以上是关于C++通讯录最新版期末不挂科系列的主要内容,如果未能解决你的问题,请参考以下文章