m0_74898028 2023-01-08 09:31 采纳率: 80%
浏览 59
已结题

关于#c++#的问题,如何解决?

怎么写输入错误信息?按我写的话,”输入错误信息“会循环很多遍,没有思路


bool opFlag = true;
    while (opFlag)
    {
        system("cls");
        cout << "**********************************************" << endl;
        cout << "*                查询学生成绩                *" << endl;
        cout << "**********************************************" << endl;
        cout << "*             1:按学号查询                  *" << endl;
        cout << "*             2:按姓名查询                  *" << endl;
        cout << "*             3:按性别查询                  *" << endl;
        cout << "*             4: 按班级查询                  *" << endl;
        cout << "*             0:返回上一级菜单              *" << endl;
        cout << "**********************************************" << endl;
        cout << "请输入您的选择:";
        cin >> n;
        switch(n)
        {
        case'1':
        cout << "请输入学号:";
        cin >> m;
        for (int k = 0; k < _studentInfo.size(); k++)
        {
            if (_studentInfo[k]._num == m)
            {
                cout << "**************************** 成绩列表 ******************************" << endl;
                cout << "    学号,     姓名, 性别, 班级名称,  考勤,  作业,  实验,  考试,  总评" << endl;
                _studentInfo[k].display();
                system("pause");
                char c = getchar();
            }
        }
        for (int k = 0; k < _studentInfo.size(); k++)
        {
            if (_studentInfo[k]._num != m)
            {
                char c = getchar();
                cout << "输入错误学号!" << endl;
                
                
            }
        }
            break;
  • 写回答

3条回答 默认 最新

  • 关注

    你又for循环了一遍,肯定是输出多次。你可以添加一个标记bool bFind = false; 在第一个for循环中,在if语句里,添加依据bFind = true,然后再for循环下面用if(bFind==false)判断学号是否满足要求就可以了。代码修改如下,修改的地方有注释:

    bool opFlag = true;
    bool bFind = false; //这里添加一个标记位
    while (opFlag)
    {
        system("cls");
        cout << "**********************************************" << endl;
        cout << "*                查询学生成绩                *" << endl;
        cout << "**********************************************" << endl;
        cout << "*             1:按学号查询                  *" << endl;
        cout << "*             2:按姓名查询                  *" << endl;
        cout << "*             3:按性别查询                  *" << endl;
        cout << "*             4: 按班级查询                  *" << endl;
        cout << "*             0:返回上一级菜单              *" << endl;
        cout << "**********************************************" << endl;
        cout << "请输入您的选择:";
        cin >> n;
        switch (n)
        {
        case'1':
            cout << "请输入学号:";
            cin >> m;
            bFind = false; //设置一个标记位,并初始为false
            for (int k = 0; k < _studentInfo.size(); k++)
            {
                if (_studentInfo[k]._num == m)
                {
                    cout << "**************************** 成绩列表 ******************************" << endl;
                    cout << "    学号,     姓名, 性别, 班级名称,  考勤,  作业,  实验,  考试,  总评" << endl;
                    _studentInfo[k].display();
                    bFind = true;//这里设置为true
                    system("pause");
                    char c = getchar();
                }
            }
            if(bFind == false) //用这个if 代替下面的for循环
                cout << "输入错误学号!" << endl;
            /*for (int k = 0; k < _studentInfo.size(); k++)
            {
                if (_studentInfo[k]._num != m)
                {
                    char c = getchar();
                    cout << "输入错误学号!" << endl;
    
    
                }
            }*/
            break;
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月23日
  • 已采纳回答 1月15日
  • 创建了问题 1月8日

悬赏问题

  • ¥15 隐藏系统界面pdf的打印、下载按钮
  • ¥15 MATLAB联合adams仿真卡死如何解决(代码模型无问题)
  • ¥15 基于pso参数优化的LightGBM分类模型
  • ¥15 安装Paddleocr时报错无法解决
  • ¥15 python中transformers可以正常下载,但是没有办法使用pipeline
  • ¥50 分布式追踪trace异常问题
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改
  • ¥50 vue router 动态路由问题
  • ¥15 关于#.net#的问题:End Function