大家帮我看看我这个问题出在哪,我把账号添加进去了,但是调用显示函数的时候,显示不出来

这是主函数


#include<iostream>
#include<string>
#include<cstdlib>
#include "functions.h"
#include "account.h"
using namespace std;




int main()
{
    //创建账号录结构体
    Accountrecords ads;
    //初始化账号录中账号个数
    int select = 0;
    while (true)
    {
        showMenu();//显示菜单

        cin >> select;

        switch (select)
        {
        case 1://1、添加账号
            addaccount(&ads);//利用地址传递          
            break;
        case 2://2、显示账号
            showAccount(&ads);
            break;
        case 3://3、删除账号
            deleteAccount(&ads);
            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;
}

这是函数声明


#pragma once
#include "account.h"
void showMenu();//显示菜单
void addaccount(Accountrecords* ads);//case 1添加账号
void showAccount(Accountrecords* ads);//case2显示账号
void deleteAccount(Accountrecords* ads);//case3删除账号

这是函数定义实现

#include <iostream>
#include "account.h"
using namespace std;
void showMenu()//显示菜单
{
    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 addaccount(Accountrecords *ads)//case 1添加账号
{
    //判断账号录是否已满,如果满了就不在添加
    if (ads->m_Size == Max)
    {
        cout<<"账号录已满,无法添加" << endl;
        return;
    }
    else
    {
        //添加具体账号
        //平台名称
        string name;
        cout << "请输入账号名称:" << endl;
        cin >> name;
        ads->accountArray[ads->m_Size].m_Name = name;

        //账号
        string account;
        cout << "请输入账号:" << endl;
        cin >> account;
        ads->accountArray[ads->m_Size].m_account = account;

        //密码
        string password;
        cout << "请输入密码:" << endl;
        cin >> password;
        ads->accountArray[ads->m_Size].m_password = password;
    }
    //更新账号录人数
    ads->m_Size++;
    cout << "添加成功!" << endl;
    system("pause");//按任意键继续、
    system("cls");//清屏
}
void showAccount(Accountrecords *ads)//case2显示账号
{
    //判断账号录中人数是否为0
    if (ads->m_Size == 0)
    {
        cout << "当前记录为空" << endl;
    }
    else
    {
        for (int i = 0; i < ads->m_Size; i++)
        {
            cout << "平台名称:" << ads->accountArray[ads->m_Size].m_Name << '\t';
            cout << "账号:" << ads->accountArray[ads->m_Size].m_account << '\t';
            cout << "密码:" << ads->accountArray[ads->m_Size].m_password<< endl;
        }
    }
    system("pause");//按任意键继续、
    system("cls");//清屏
}
//检测账号是否存在,如果存在,返回账号所在数组中的具体位置,不存在,返回-1
int isExist(Accountrecords * ads, string name)
{
    for (int i = 0; i < ads->m_Size; i++)
    {//找到用户输入的平台名称
        if (ads->accountArray[i].m_Name == name)
        {
            return i;//找到返回平台名称的下标编号
        }
    }
    return -1;//如果遍历结束都没有找到,返回-1
}
void deleteAccount(Accountrecords* ads)//case3删除账号
{
    cout << "请输入您要账号平台名称" << endl;
    string name;
    cin >> name;
    int ret = isExist(ads, name);
    if (ret != -1)
    {
        //查到此账号,删除
        for (int i = ret; i < ads->m_Size; i++)
        {
            //数据前移
            ads->accountArray[i] = ads->accountArray[i + 1];
            ads->m_Size--;//更新账号录中的账号数
            cout << "删除成功!" << endl;
        }
    }
    else
    {
        cout << "没有此账号" << endl;
    }
    system("pause");

    system("cls");

}

这是结构体

#pragma once
#include<string>
#define Max 1000
using namespace std;
struct Account
{
    //平台名称
    string m_Name;
    //账号
    string m_account;
    //密码
    string m_password;    
};
struct Accountrecords
{
    //保存账号的数组
    struct Account accountArray[Max];
    //当前记录的账号个数
    int m_Size = 0;


};

这是运行结果

img

img

没什么大问题,for循环下标错了,怎么能使用ads->m_Size作为下标呢,下次注意就行了
添加和显示的都应该是i为下标

for (int i = 0; i < ads->m_Size; i++)
    {
        cout << "平台名称:" << ads->accountArray[i].m_Name << '\t';
        cout << "账号:" << ads->accountArray[i].m_account << '\t';
        cout << "密码:" << ads->accountArray[i].m_password << endl;
    }

另外,建议在你添加成功一个账号后就打印,
就是

//更新账号录人数
    ads->m_Size++;
    cout << "添加成功!" << endl;

后面加上打印
这样能更好的定位问题,是cin的问题还是show函数传递参数不正确而导致无法输出,比如此处你传递的参数不是指针,那么在show中也是无法打印的

我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《C++期末大作业——通讯录系统(基于结构体struct)》, 一起来围观吧 https://blog.csdn.net/weixin_47974364/article/details/121069256?utm_source=app&app_version=5.3.0&code=app_1562916241&uLinkId=usr1mkqgl919blen