开关内的案例不停地循环,即使我坏了

Case inside switch looping non-stop, even though i had break

本文关键字:坏了 循环 案例 开关      更新时间:2023-10-16

我刚开始学习 c++,我正在使用开关大小写制作这个菜单驱动的程序。问题是,当我输入其中一个选项时,尽管我已经使用了break,但它会无限循环。

    while (choice != 3)
    {
            switch(choice)
            {
                case 1:
                {
                    int TIME;
                    cout << "Input time: " << endl;
                    cin >> TIME;
                    string ACTIVITY;
                    cout << "Input activity: " << endl;
                    cin >> ACTIVITY;
                    todo.addNode(TIME, ACTIVITY);
                    break;
                }
                case 2:
                {
                    int DELETE;
                    cout << "Which activity that you want to delete: " << endl;
                    cin >> DELETE;
                    todo.removeIndex(DELETE);
                    break;
                }
                default:
                {
                    cout << "Invalid input";
                    break;
                }
            }
}

例如,如果我按 1,程序会无休止地询问时间和活动而不会中断。当我按下 1、2 或 3 以外的任何数字时,它会无休止地打印无效输入。

我错过了什么吗?

目前您的代码脱离了 switch 语句,但无法从 while 循环中出来,因为条件未作为其中的输入。

要摆脱 while 循环,您需要一个标志来打破外部 while 循环:

int flag=0;
while (choice != 3)
{
    switch(choice)
    {
        case 1:
        {
            int TIME;
            cout << "Input time: " << endl;
            cin >> TIME;
            string ACTIVITY;
            cout << "Input activity: " << endl;
            cin >> ACTIVITY;
            todo.addNode(TIME, ACTIVITY);
            break;
        }
        case 2:
        {
            int DELETE;
            cout << "Which activity that you want to delete: " << endl;
            cin >> DELETE;
            todo.removeIndex(DELETE);
            break;
        }
        default:
        {
            cout << "Invalid input";
            flag=1;
            break;
        }
    }
    if(flag == 1)
    {
        break;
    }
}

这是一个实现。您的flag=1;语句可能在其他地方。

注意1:如果在此while循环之后函数中有其他内容要处理,请不要使用return代替break。否则,您可以从 if(flag == 1) 条件返回。

注意2:另一种选择是在默认情况下从用户那里获取选择输入。 就像这样cin >> choice;问题是你的 while 循环在进入循环后没有选择,因为这个选择不会改变,因此循环无休止。