问题遇到的现象和发生背景
C++ 莫名其妙报错(main函数)
问题相关代码,请勿粘贴截图
#include <iostream>
#include <cstdlib>
#include <string>
#define MAX 1000
using namespace std;
// 联系人结构体的创建
struct Contacter
{
// 姓名
string name;
// 性别
string gender;
// 联系电话
int phone_number;
// 家庭住址
string homeland;
};
// 通讯录结构体的创建
struct Menu
{
// 存放联系人的数组
Contacter Con_menu[MAX];
// 存放联系人的多少
int Mysize=0;
};
// 函数声明
// 菜单函数
void Showmenu();
// 添加联系人函数
struct Contacter Add_contacter(Menu Main_menu_fun);
// 打印通讯录的函数
void Print(Menu Main_menu_fun);
// 第一个参数为联系人列表
// 删除联系人
void Remove(Menu&Main_menu_fun);
// 查找联系人
void Find(Menu Main_menu_fun);
// 修改联系人
void Modify(Menu Main_menu_fun);
// 清空联系人
void Delete(Menu Main_menu_fun);
int main()
{
// 初始化
int Request_Code = -1; // 指令参量
bool Quit = false; // 退出状态判断
struct Menu Main_menu; // 通讯录本体
// 程序主体
while(1)
{
// 菜单显示
Showmenu();
cout << "请输入操作指令:" << endl;
cin >> Request_Code; // 状态选择
switch (Request_Code)
{
// 添加联系人
case 1:
if (Main_menu.Mysize < 1000)
{
Main_menu.Con_menu[Main_menu.Mysize] = Add_contacter(Main_menu);
Main_menu.Mysize++;
break;
}
else
{
cout << "通讯录已满,不可添加";
break;
}
// 显示联系人
case 2:
Print(Main_menu);
break;
// 删除联系人
case 3:
Remove(Main_menu);
break;
// 查找联系人
case 4:
Find(Main_menu);
break;
// 修改联系人
case 5:
Modify(Main_menu);
break;
// 清空联系人
case 6:
Delete(Main_menu);
break;
// 退出该程序
case 0:
Quit = true;
break;
// 其他情况
default:
break;
}
if (Quit)
{
break;
}
else
{
// 按下任意键清屏
system("pause");
system("cls");
}
}
return 0;
}
//菜单函数
void Showmenu()
{
cout << "*****************通讯录系统******************" << endl;
cout << "*********************************************" << endl;
cout << "*************1 ---> 添加联系人*************" << endl;
cout << "*********************************************" << endl;
cout << "*************2 ---> 显示联系人*************" << endl;
cout << "*********************************************" << endl;
cout << "*************3 ---> 删除联系人*************" << endl;
cout << "*********************************************" << endl;
cout << "*************4 ---> 查找联系人*************" << endl;
cout << "*********************************************" << endl;
cout << "*************5 ---> 修改联系人*************" << endl;
cout << "*********************************************" << endl;
cout << "*************6 ---> 清空联系人*************" << endl;
cout << "*********************************************" << endl;
cout << "*************0 ---> 退出本系统*************" << endl;
cout << "*********************************************" << endl;
cout << endl;
}
// 1. 添加联系人
struct Contacter Add_contacter(Menu Main_menu_fun)
{
struct Contacter addcon_fun;
while(true)
{
cout << "添加的联系人姓名:";
cin >> addcon_fun.name;
// 检索重复联系人
if (addcon_fun.name == Main_menu_fun.Con_menu->name)
{
cout << "已有该联系人,请重新输入" << endl;
continue;
}
cout << endl;
cout << "添加的联系人性别:";
cin >> addcon_fun.gender;
cout << endl;
cout << "添加的联系人电话号码:";
cin >> addcon_fun.phone_number;
cout << endl;
cout << "添加的联系人家庭住址:";
cin >> addcon_fun.homeland;
cout << endl;
break;
}
return addcon_fun;
}
// 2.显示联系人
void Print(Menu Main_menu_fun)
{
cout << "联系人\t" << "性别\t" << "电话\t" << "住址\t" << endl;
for (int i = 0; i < Main_menu_fun.Mysize; i++)
{
cout << Main_menu_fun.Con_menu[i].name << "\t"
<< Main_menu_fun.Con_menu[i].gender << "\t"
<< Main_menu_fun.Con_menu[i].phone_number << "\t"
<< Main_menu_fun.Con_menu[i].homeland << "\t" << endl;
}
}
//3. 删除联系人
void Remove(Menu&Main_menu_fun)
{
cout << "请键入要删除的联系人" << endl;
string temp;
int temp_int = -1;
cin >> temp;
for (int i = 0; i < Main_menu_fun.Mysize; i++)
{
if (temp == Main_menu_fun.Con_menu[i].name)
{
temp_int = i;
}
}
if (temp_int == -1)
{
cout << "查无此人" << endl;
}
else
{
for (int j = temp_int; j < Main_menu_fun.Mysize; j++)
{
Main_menu_fun.Con_menu[j] = Main_menu_fun.Con_menu[j + 1];
}
}
Main_menu_fun.Mysize--;
}
// 4.查找联系人
void Find(Menu Main_menu_fun)
{
cout << "请键入要查找的联系人" << endl;
string temp;
int temp_int = -1;
cin >> temp;
for (int i = 0; i < Main_menu_fun.Mysize; i++)
{
if (temp == Main_menu_fun.Con_menu[i].name)
{
temp_int = i;
}
}
if (temp_int == -1)
{
cout << "查无此人" << endl;
}
else
{
cout << "姓名:" << Main_menu_fun.Con_menu[temp_int].name << endl;
cout << "性别:" << Main_menu_fun.Con_menu[temp_int].gender << endl;;
cout << "家庭住址:" << Main_menu_fun.Con_menu[temp_int].homeland << endl;;
cout << "电话号码:" << Main_menu_fun.Con_menu[temp_int].phone_number << endl;;
}
}
// 5.修改联系人
void Modify(Menu Main_menu_fun)
{
cout << "请键入要修改的联系人" << endl;
string temp;
int temp_int = -1;
cin >> temp;
for (int i = 0; i < Main_menu_fun.Mysize; i++)
{
if (temp == Main_menu_fun.Con_menu[i].name)
{
temp_int = i;
}
}
if (temp_int == -1)
{
cout << "查无此人" << endl;
}
else
{
string temp_1;
cout << "请输入修改后的性别" << endl;
cin >> temp_1;
Main_menu_fun.Con_menu[temp_int].gender = temp_1;
int num;
cout << "请输入修改后的电话号码" << endl;
cin >> num;
Main_menu_fun.Con_menu[temp_int].phone_number = num;
string temp_2;
cout << "请输入修改后的家庭住址" << endl;
cin >> temp_2;
Main_menu_fun.Con_menu[temp_int].homeland= temp_2;
}
}
// 6.清空联系人
void Delete(Menu Main_menu_fun)
{
Main_menu_fun.Mysize = 0;
cout << "数据已清零" << endl;
}
运行结果及报错内容
我的解答思路和尝试过的方法
加入delete函数之前是可以按照要求运行的,加之后就崩了,我觉得应该跟那个警告什么字节放到堆里有关,总不可能是函数太多炸了吧
我想要达到的结果
搞清楚那个为什么会警告,为什么运行不起来,炸掉了。