在B站学C语言,照着黑马程序员的视频做的但是出现了问题
#include
#include
#include
#define max 1000
using namespace std;
//联系人结构体
struct lian_xi_ren
{
string m_name;
int m_age;
//性别,男为一女为二
int m_Sex;
string m_phone;
string m_addr;
};
struct tong_xun_lu
{
struct lian_xi_ren zui_da_rong_liang[max];
int m_size;
};
//封装显示系统
void xian_shi_jie_mian() {
cout << "***********************" << endl;
cout << "*****1、添加联系人*****" << endl;
cout << "*****2、显示联系人*****" << endl;
cout << "*****3、删除联系人*****" << endl;
cout << "*****4、查找联系人*****" << endl;
cout << "*****5、修改联系人*****" << endl;
cout << "*****6、清空联系人*****" << endl;
cout << "*****0、退出联系人*****" << endl;
cout << "***********************" << endl;
}
void tian_jia_lian_xi_ren(tong_xun_lu* abs)
{
//判断通讯录是否已满
if (abs->m_size == max)
{
cout << "通讯录已满" << endl;
return;
}
else
{//输入姓名
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->zui_da_rong_liang[abs->m_size].m_name = name;
//输入性别
cout << "请输入性别" << endl;
cout << "1,男" << endl;
cout << "2,女" << endl;
int sex = 0;
cin >> sex;
while (true) {
if (sex == 1 || sex == 2) {
abs->zui_da_rong_liang[abs->m_size].m_Sex = sex;
break;
}
cout << "输入有误,请重新输入" << endl;
break;
}
//输入年龄
cout << "请输入年龄" << endl;
int age;
cin >> age;
abs->zui_da_rong_liang[abs->m_size].m_age = age;
//输入电话
cout << "请输入电话" << endl;
string phone;
cin >> phone;
abs->zui_da_rong_liang[abs->m_size].m_phone = phone;
//输入地址
cout << "请输入地址" << endl;
string addr;
cin >> addr;
abs->zui_da_rong_liang[abs->m_size].m_addr = addr;
//更新人数
abs->m_size++;
cout << "添加成功" << endl;
system("pause");
system("cls");
}
}
//显示联系人
void xian_shi_lian_xi_ren(tong_xun_lu* abs) {
//当通讯录人数为0时,提示通讯录为空,请添加联系人
//不为0显示通讯录联系人
if (abs->m_size==0)
{
cout << "通讯录为空" << endl;
}
else {
for (int i = 0; i < abs->m_size; i++)
{
cout << "姓名:" << abs->zui_da_rong_liang[i].m_name << "\t";
cout << "性别:" << (abs->zui_da_rong_liang[i].m_Sex == 1 ? "男" : "女") << "\t";
cout << "年龄:" << abs->zui_da_rong_liang[i].m_age << "\t";
cout << "电话:" << abs->zui_da_rong_liang[i].m_phone << "\t";
cout << "住址:" << abs->zui_da_rong_liang[i].m_addr << endl;
}
}
system("pause");
system("cls");
}
//查找联系人
//需要传入联系人检测是否有这个联系人,在进行对比
int cha_zhao_lian_xi_ren(tong_xun_lu * abs , string name) {
for (int i=0;im_size;i++)
{
if (abs->zui_da_rong_liang[i].m_name ==name )
{
return i;//找到了返回人名
}
}
return -1;//如果没找到返回一个-1
}
void delete_lian_xi_ren(tong_xun_lu* abs) {
cout << "请输入你要删除的联系人" << endl;
string name;
cin >> name;
int ret = cha_zhao_lian_xi_ren(abs, name);
if (ret != -1) {
for(int i=ret;retm_size;i++)
{
//数据前移
abs->zui_da_rong_liang[i] = abs->zui_da_rong_liang[i =i+ 1];
}
abs->m_size--;
cout << "删除成功" << endl;
}
else {
cout << "查无此人" << endl;
system("pause");
system("cls");
}
}
int main() {
//创建通讯录结构体变量
tong_xun_lu abs;
abs.m_size= 0;
int select = 0;//创建用户选择输入的变量
//菜单调用
while (true)
{
xian_shi_jie_mian();
cin >> select;
switch (select)
{
case 1://1、添加联系人
tian_jia_lian_xi_ren(&abs);//利用地址传递添加联系人
break;
case 2: //2、显示联系人
xian_shi_lian_xi_ren(&abs);
break;
case 3:// 3、删除联系人
{
cout << "请输入人名" << endl;
string name;
cin >> name;
if (cha_zhao_lian_xi_ren(&abs, name) == -1)
{
cout << "查无此人" << endl;
}
else {
cout << "找到此人" << endl;
}
}
//delete_lian_xi_ren(&abs);
break;
case 4: //4、查找联系人
break;
case 5:// 5、修改联系人
break;
case 6: //6、清空联系人
break;
case 0:// 0、退出联系人
cout << "欢迎下次使用" << endl;
system("pause");
return 0;
break;
}
}
system("pause");
return 0;
}
添加查看都没有问题,一删除就有问题了,一删除程序就退出了
for(int i=ret;ret<abs->m_size;i++)
改成
for(int i=ret;ret<abs->m_size - 1;i++)
试试
for(int i=ret;i<abs->m_size-1;i++)
{
//数据前移
abs->zui_da_rong_liang[i] = abs->zui_da_rong_liang[i+ 1];
}