Miki_Sa_yaka 2022-08-09 14:59 采纳率: 77.8%
浏览 70
已结题

C++用后一个数据覆盖前一个数据达到删除数组指定元素的问题未果

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

C++用后一个数据覆盖前一个数据达到删除数组指定元素的问题未果

问题相关代码,请勿粘贴截图
#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);


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:

            break;



        // 修改联系人
        case 5:

            break;



        // 清空联系人
        case 6:

            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;
    cin >> temp;
    for (int i = 0; i < Main_menu_fun.Mysize; i++)
    {
        if (temp == Main_menu_fun.Con_menu[i].name)
        {
            temp_int = i;
        }
    }
    for (int j = temp_int; j < Main_menu_fun.Mysize; j++)
    {
        cout << j;
        Main_menu_fun.Con_menu[j] = Main_menu_fun.Con_menu[j + 1];
    }
    Main_menu_fun.Mysize--;
}

运行结果及报错内容

没有办法删除指定数组元素,我自查过temp_int检索的索引值是对的

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

我觉得可能是一定要用指针?我不太确定,反正就是删不掉

我想要达到的结果

解决这几个警告,以及删掉数组元素

img

img

  • 写回答

1条回答 默认 最新

  • 烟雨龙升 2022-08-09 15:24
    关注

    void Remove(Menu &Main_menu_fun)
    而且你有一点逻辑bug,如果删除的东西不存在你还要size--吗

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月17日
  • 已采纳回答 8月9日
  • 创建了问题 8月9日

悬赏问题

  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?