顺序表(c++)这个报错好奇怪?我该怎么解决?

想创建一个本身有数据的学生成绩表,可以进行增删查改操作

下面是修改后的代码

#include<iostream>
#include<string>
#include<iomanip>
#include<windows.h>
using namespace std;


const int MaxSize=25;

typedef struct A{
    string Name;
    int Num;
    string sex;
    float EnglishScore;
}StudentList;
StudentList student[MaxSize];

//重载输入运算符以输入struct类型数据
istream & operator >>(istream & in,StudentList & A)
{
    cout<<"请输入姓名:";
    in>>A.Name;
    cout<<"请输入学号:";
    in>>A.Num;
    cout<<endl;
    cout<<"请输入性别:";
    in>>A.sex;
    cout<<endl;
    cout<<"请输入英语成绩:";
    cin>>A.EnglishScore;
    return in;
}


//重载输出运算符以输出struct类型数据
ostream & operator<<(ostream & out,StudentList & B)
{ 
    out<<B.Name<<B.Num<<B.sex<<B.EnglishScore<<endl;
    return out;
}

typedef StudentList EType;
//数据表的定义
typedef struct B{
    EType *elem;//内存空间大小
    int Last;//表长
}SeqList;


int main()
{
    int length;
    int Option=0;
    SeqList L;
    L.Last=0;
    cout<<"请输入线性表长度:";
    cin>>length;
    system("CLS");//执行命令"清屏操作"

    //各类函数定义
    void InitWriteRecord();
    void CreateList(SeqList *L,int length);
    void PrintList(SeqList *L,int length);
    void SequenceList(SeqList *L,int length);

    void DeleteList(SeqList *L,int length);
    void InsertList(SeqList *L,int length);
    void ChangeList(SeqList *L,int length);
    void SearchList(SeqList *L,int length);
    
    InitWriteRecord();
    while(1)
    { 
        cout<<"----------1.增加顺序表."<<endl;
        cout<<"----------2.输出顺序表元素."<<endl;
        cout<<"----------3.顺序表元素排序."<<endl;
        cout<<"----------4.向顺序表中插入某个元素."<<endl;
        cout<<"----------5.删除顺序表单个元素."<<endl;
        cout<<"----------6.修改顺序表单个元素."<<endl;
        cout<<"----------7.查询顺序表单个元素."<<endl;
        cout<<endl<<"请输入你的选择:";
        cin>>Option;
        switch(Option)
        {
        case 1:CreateList(&L,length);break;
        case 2:PrintList(&L,length);break;
        case 3:SequenceList(&L,length);break;
        
        case 4:InsertList(&L,length);break;
        case 5:DeleteList(&L,length);break;
        case 6:ChangeList(&L,length);break;
        case 7:SearchList(&L,length);break;
        default:cout<<"输入错误!";break;
        }

        cout<<endl;
    }
    return 0;
}

void InitWriteRecord()
{
    string name[10]={"彭亮","王明","李智","刘丹","肖象"};
    int num[5]={1,2,3,4,5};
    string sex[5]={"男","男","男","女","女"};
    float EnglishScore[5]={78,92,66,77,100};
    
    for(int i=0;i<5;i++)
    {
        student[i].Name=name[i];        
         student[i].Num=num[i];
        student[i].sex=sex[i];
        student[i].EnglishScore=EnglishScore[i];
    }
}

//建立顺序表(在原始表中添加学生信息)
void CreateList(SeqList *L,int length)
{
    int i;
    for(i=1;i<=length;i++)
    {
        cout<<"请输入要增加的第"<<i<<"个学生的信息:";
        cin>>L->elem[i+4];
        L->Last=length;
        if(length>=MaxSize)
        {
            cout<<endl<<"表满!"<<endl;
        }
    }
    for(i=0;i<length;i++)
    {
        cout<<L->elem[i]<<" ";
    }
}


//输出表
void PrintList(SeqList *L,int length)
{
    int i;
    cout<<"姓名"<<"---------"<<"学号"<<"---------"<<"性别"<<"---------"<<"英语成绩"<<endl;
    for(i=0;i<L->Last;i++)
    {
        cout<<L->elem[i].Name<<"---------"<<L->elem[i].Num<<"---------"<<L->elem[i].sex<<"---------"<<L->elem[i].EnglishScore<<endl;
    }
    cout<<endl;
}

//对数据按学号元素排序(冒泡排序法)
void SequenceList(SeqList *L,int length)
{
    StudentList Temp;
    for(int i=0;i<length-1;i++)
    {
        for(int j=0;j<length-1;j++)
        {
            if(L->elem[j].Num>L->elem[j+1].Num)
            {
                Temp=L->elem[j];
                (L->elem[j])=(L->elem[j+1]);
                L->elem[j+1]=Temp;
            }
        }
    }
    cout<<endl;
}

//删除表的某个元素
void DeleteList(SeqList *L,int length)
{
    int DeData=0;
    cout<<"要删除第几个元素:";
    cin>>DeData;
    for(int i=DeData;i<L->Last;i++)
    {
        L->elem[i-1]=L->elem[i];//向前移一位
    }
    L->Last--;

    for(int k=0;k<L->Last;k++)
    {
        cout<<L->elem[k]<<" ";
    }
    cout<<endl;
}

//往表中插入元素
void InsertList(SeqList *L,int length)
{
    StudentList InsertData;
    int i=0;
    int InDataLocation=0;

    cout<<"请输入要插入的元素:";
    cin>>InDataLocation;
    cout<<endl;
    if(InDataLocation>L->Last+1)
    {
        cout<<"插入位置超过表的最大长度,请重新输入!"<<endl<<endl;
        InsertList(L,length);
    }
    else
    {
        for(int i=L->Last;i>=InDataLocation-1;i--)
            L->elem[i+1]=L->elem[i];//往后移一位
    }
    L->elem[InDataLocation-1]=InsertData;
    L->Last++;
    cout<<"插入后的表为:";
    PrintList(L,length);
    
    cout<<endl;
}

//修改顺序表某个元素
void ChangeList(SeqList *L,int length)
{
    int ChangeNum;
    cout<<"请输入要修改成绩的学生的学号:";
    cin>>ChangeNum;
    for(int i=0;i<L->Last;i++)
    {
        if(L->elem[i].Num==ChangeNum)
        {
            cout<<"你将英语成绩改成:";
            cin>>L->elem[i].EnglishScore;
            cout<<endl<<"修改成功!"<<endl;
        }
    }
}

//查询学生信息
void SearchList(SeqList *L,int length)
{
    string SearchName;
    cout<<"请输入要查询的学生姓名:";
    cin>>SearchName;
    for(int i=0;i<L->Last;i++)
    {
        if(L->elem[i].Name==SearchName)
        {
            cout<<"姓名"<<"---------"<<"学号"<<"---------"<<"性别"<<"---------"<<"英语成绩"<<endl;
            cout<<L->elem[i].Name<<"---------"<<L->elem[i].Num<<"--------"<<L->elem[i].sex<<"---------"<<L->elem[i].EnglishScore<<endl;
        }
    }
}

现在的报错:

img

第一 你截图没显示出代码行数
第二 你截图这么多代码,而不是源码,是想考验大家代码眼力吗?

有关这个报错,我觉得应该是你结构体内部有string类型的name,但是你对string类型的操作是不对的,比如你strcy我觉得有点问题

img

可能没找对,但是你至少让我知道哪一行出错,或者直接贴出代码调试一下。。。

void InitWriteRecord()
{
    string name[10] = { "彭亮","王明","李智","刘丹","肖象" };
    int num[5] = { 1,2,3,4,5 };
    string sex[5] = { "男","男","男","女","女" }; //字符串要用双引号。汉字并不是单字符。
    float EnglishScore[5] = { 78,92,66,77,100 };

    for (int i = 0; i < 5; i++)
    {
        student[i].Name = name[i];  //c++ string 有重写=,里面就是复制的,直接使用即可。下面一样。还有就是,感觉char数组就可以了,string有点小题大做,而且性别根本没有必要用汉字,用01就能表示了。只是输出的时候加个判断而已,不过你个人喜好啰,问题不大。
        student[i].Num = num[i];
        student[i].sex = sex[i];
        student[i].EnglishScore = EnglishScore[i];
    }
}

//还有就是 你下面还有错的。