关于#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;

你又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;

因为你的输入错误信息在一个循环里面,所以会输出多次啊。你下面这个循环完全不需要,上面这个循环执行完后没有找到学号,就可以输出学号错误信息了,没有必要再循环一遍。望采纳!!!!!

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632