虽然我已经休息,但是开关内部的情况不停地循环

时间:2015-01-10 03:01:48

标签: c++ loops switch-statement

我刚开始学习c ++,我正在使用switch case制作这个菜单驱动的程序。 问题是,当我输入其中一个选项时,它会无限循环,尽管我已经使用了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以外的任何数字时,它会无限地打印无效输入。

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

目前你的代码突破了switch语句,但是不能从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:如果在此return循环后的函数中还有其他事情要处理,请不要使用break代替while。否则,您可以从if(flag == 1)条件返回。

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