yxp854399664 2021-10-26 20:44 采纳率: 100%
浏览 18
已结题

c++在vs2019中运行代码163行显示访问权限错误


#pragma once
#include<iostream>
#include<fstream>
#define FILENAME "stulist.txt"
using namespace std;

struct StuNode
{

    StuNode(int num, int math, int eng, int yuwen, int sum);

    int num; // sutdent number
    int math, eng, yuwen; // module name
    int sum; // total marks
    StuNode* nextstu; // node link
};


class SInfo
{
    StuNode* StuListHead;
public:

    bool m_FileIsEmpty;


    //学生数组指针
    StuNode** m_StuArry;

    //记录学生人数
    int m_StuNum;

    //初始化学生
    void init_Stu();

    //统计文件中人数
    int get_StuNum();




    SInfo();      //Constructor 构造函数 初始化数据 显示菜单
    ~SInfo();    //Destructor 析构
    void StuInsert(int snum, int smath, int seng, int syuwen);  //Insert student information 3、附加的学生信息

};


StuNode::StuNode(int num, int math, int eng, int yuwen, int sum)
{
    this->eng = eng;
    this->math = math;
    this->num = num;
    this->sum = sum;
    this->yuwen = yuwen;
}


SInfo::SInfo()
{
    //初始化属性

    //文件不存在
    ifstream ifs;
    ifs.open(FILENAME, ios::in);//读文件

    //1.文件不存在的情况
    if (!ifs.is_open())
    {
        //cout << "文件不存在" << endl;
        //初始化属性
        //初始化记录人数
        this->m_StuNum = 0;
        //初始化数组指针
        this->m_StuArry = NULL;
        //初始化文件是否为空
        this->m_FileIsEmpty = true;
        ifs.close();
        return;
    }
    //2.文件存在 数据为空
    char ch;
    ifs >> ch;
    if (ifs.eof())
    {
        //文件为空
        //cout << "文件为空!" << endl;
        //初始化属性
        //初始化记录人数
        this->m_StuNum = 0;
        //初始化数组指针
        this->m_StuArry = NULL;
        //初始化文件是否为空
        this->m_FileIsEmpty = true;
        ifs.close();
        return;
    }

    //3、文件存在,并记录属性
    int num = this->get_StuNum();
    this->m_StuNum = num;

    //开辟空间
    this->m_StuArry = new    StuNode * [this->m_StuNum];
    //将文件中的数据,存到数组中
    this->init_Stu();
}


//insert student information 3、附加的学生信息
void SInfo::StuInsert(int snum, int smath, int seng, int syuwen)
{
    //合函数
    int ssum = 0;
    //添加
    //计算添加新的空间大小
    int newSize = this->m_StuNum + 1;//新空间大小 = 原来记录人数 + 新增人数

    //开辟新空间

    StuNode** newSpace = new StuNode * [newSize];

    //将原来空间下数据,拷贝到新空间下
    if (this->m_StuArry != NULL)
    {
        for (int i = 0; i < this->m_StuNum; i++)
        {
            newSpace[i] = this->m_StuArry[i];
        }
    }


    cout << "Please enter student information:" << endl;
    cout << "Num >> Math >> English >> Chinese  " << endl;
    cin >> snum >> smath >> seng >> syuwen;

    StuNode* student = NULL;


    //判断是否输入正确
    if (cin.good())
    {
        ssum = smath + seng + syuwen;

        student = new StuNode(snum, smath, seng, syuwen, ssum);

        newSpace[this->m_StuNum + 1] = student;


        //释放原有空间
        delete[] this->m_StuArry;

        //更改新空间的指向
        this->m_StuArry = newSpace;

        //更新新的职工人数
        this->m_StuNum = newSize;

        this->m_FileIsEmpty = false;

        for (int i = 0; i < this->m_StuNum; i++)
        {

            cout << this->m_StuArry[i]->num << " "
                << this->m_StuArry[i]->math << " "
                << this->m_StuArry[i]->eng << " "
                << this->m_StuArry[i]->yuwen << " "
                << this->m_StuArry[i]->sum << " "
                << endl;
        }

        cout << endl;
        cout << "The addition was successful" << endl;
        cout << endl;
    }
    else
    {
        cout << endl;
        cout << "Wrong data type entered,will return to the menu" << endl;
        cin.clear();
        while (cin.get() != '\n')
            continue;

    }


    system("pause");
    system("cls");
}


//统计文件中的人数
int SInfo::get_StuNum()
{
    ifstream ifs;
    ifs.open(FILENAME, ::ios::in);//打开文件 读

    int num; // sutdent number
    int math, eng, yuwen; // module name
    int sum; // total marks

    int Num = 0;

    while (ifs >> num && ifs >> math && ifs >> eng && ifs >> yuwen && ifs >> sum)
    {
        //统计人数变量
        Num++;
    }

    return Num;
}


//初始化学生
void SInfo::init_Stu()
{
    ifstream ifs;
    ifs.open(FILENAME, ios::in);

    int num; // sutdent number
    int math, eng, yuwen; // module name
    int sum; // total marks

    int index = 0;
    while (ifs >> num && ifs >> math && ifs >> eng && ifs >> yuwen && ifs >> sum)
    {
        StuNode* student = NULL;

        student = new StuNode(num, math, eng, yuwen, sum);

        this->m_StuArry[index] = student;

        index++;
    }

    //关闭文件
    ifs.close();

}

SInfo::~SInfo()
{

}
int main()
{


    SInfo wm;
    wm.StuInsert(0,0,0,0);



    system("pause");
    return 0;
}
  • 写回答

1条回答 默认 最新

  • 关注

    newSpace[this->m_StuNum + 1] = student 这里应该是:
    newSpace[this->m_StuNum ] = student

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

报告相同问题?

问题事件

  • 系统已结题 11月3日
  • 已采纳回答 10月26日
  • 创建了问题 10月26日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分