开关内的外壳不停地循环,即使我已经中断
Case inside switch looping non-stop, even though i had break
我刚开始学习 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,程序会不断询问时间和 activity,不会中断。当我按下 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:不要用return
代替break
,如果在这个[=14=之后的函数中还有其他需要处理的地方] 环形。否则,您可以从 if(flag == 1) 条件 return。
注2:另一种选择是在默认情况下从用户那里获得选择输入。像这样 cin >> choice;
问题是你的 while 循环在进入循环后没有选择,因为这个选择不会改变,因此无限循环。
我刚开始学习 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,程序会不断询问时间和 activity,不会中断。当我按下 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:不要用return
代替break
,如果在这个[=14=之后的函数中还有其他需要处理的地方] 环形。否则,您可以从 if(flag == 1) 条件 return。
注2:另一种选择是在默认情况下从用户那里获得选择输入。像这样 cin >> choice;
问题是你的 while 循环在进入循环后没有选择,因为这个选择不会改变,因此无限循环。