你把我灌醉! 2022-05-14 12:11 采纳率: 50%
浏览 71
已结题

黑马程序员的用多态实现职工管理系统的一个问题

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

//排序职工
void WorkerManager::Sort_Emp()
{
if (this->m_FileIsEmpty)
{
cout << "文件不存在或记录为空" << endl;
system("pause");
system("cls");
}
else
{
cout << "请选择排序方式:" << endl;
cout << "1.按照工号进行升序" << endl;
cout << "2.按照工号进行降序" << endl;

    int select = 0;
    cin >> select;
    for (int i = 0; i < m_EmpNum; i++)
    {
        int minOrMax = i;//声明最小值下标

        for (int j = i + 1; i < this->m_EmpNum; j++)
        {
            //升序
            if (select == 1)
            {
                if (this->m_EmpArray[minOrMax]->m_ID > this->m_EmpArray[j]->m_ID)
                {
                    minOrMax = j;
                }
            }
            //降序
            else
            {
                if (m_EmpArray[minOrMax]->m_ID < m_EmpArray[j]->m_ID)
                {
                    minOrMax = j;
                }
            }
        }
            //判断一开始认定 最小值或最大值 是不是计算的最大值或最小值,如果不是,交互数据
            if (i != minOrMax)
            {
                Worker* temp = m_EmpArray[i];
                m_EmpArray[i] = m_EmpArray[minOrMax];
                m_EmpArray[minOrMax] = temp;
            }

}
cout << "排序成功,排序后的结果为:" << endl;
this->save();//排序后结果保存到文件中
this->Show_Emp();//展示所有
}
}

运行结果及报错内容

img

img

老是报错说是运行在升序处发生访问冲突。

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

我把两段升序和降序代码分开各自写,还是不行

我想要达到的结果
  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-05-14 12:52
    关注

    第3行这句:for (int i = 0; i < m_EmpNum; i++) 修改, i < m_EmpNum; 后面的循环是 for(j = i + 1;....) 会造成数组越界操作。第7行for(.....i < this->m_EmpNum; j++)中间 i < this->m_EmpNum; 这里应该是:j < this->m_EmpNum; ,修改如下,供参考:

    void WorkerManager::Sort_Emp()
    {
        if (this->m_FileIsEmpty)
        {
            cout << "文件不存在或记录为空" << endl;
            system("pause");
            system("cls");
        }
        else{
            cout << "请选择排序方式:" << endl;
            cout << "1.按照工号进行升序" << endl;
            cout << "2.按照工号进行降序" << endl;
    
            int select = 0;
            cin >> select;
            for (int i = 0; i < this->m_EmpNum - 1; i++) //修改
            //for (int i = 0; i < m_EmpNum; i++)
            {
                 int minOrMax = i;//声明最小值下标
    
                 for (int j = i + 1; j < this->m_EmpNum; j++) //修改
                 //for (int j = i + 1; i < this->m_EmpNum; j++)
                 {
                       if (select == 1) //升序
                       {
                           if (this->m_EmpArray[minOrMax]->m_ID > this->m_EmpArray[j]->m_ID)
                           {
                               minOrMax = j;
                           }
                       }
                       else //降序
                       {
                           if (this->m_EmpArray[minOrMax]->m_ID < this->m_EmpArray[j]->m_ID)
                           {
                               minOrMax = j;
                           }
                       }
                 }
                      //判断一开始认定 最小值或最大值 是不是计算的最大值或最小值,如果不是,交互数据
                 if (i != minOrMax)
                 {
                       Worker* temp = m_EmpArray[i];
                       m_EmpArray[i] = m_EmpArray[minOrMax];
                       m_EmpArray[minOrMax] = temp;
                 }
            }
            cout << "排序成功,排序后的结果为:" << endl;
            this->save();//排序后结果保存到文件中
            this->Show_Emp();//展示所有
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月26日
  • 已采纳回答 5月18日
  • 创建了问题 5月14日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么