Miki_Sa_yaka 2022-08-10 09:01 采纳率: 77.8%
浏览 54

C++ 函数突然莫名其妙报错

问题遇到的现象和发生背景

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;
}

运行结果及报错内容

img

img

我的解答思路和尝试过的方法

加入delete函数之前是可以按照要求运行的,加之后就崩了,我觉得应该跟那个警告什么字节放到堆里有关,总不可能是函数太多炸了吧

我想要达到的结果

搞清楚那个为什么会警告,为什么运行不起来,炸掉了。

  • 写回答

5条回答 默认 最新

  • 石岩Maple 2022-08-10 09:11
    关注

    while看着就是死循环

    评论

报告相同问题?

问题事件

  • 创建了问题 8月10日

悬赏问题

  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题