如何突破内部 while 循环中的 for 循环
How do I break out of the for loop inside an inner while loop
对于这个循环,我需要能够在一个长度必须为 100 个元素的数组中输入名称,并在输入 Q 或 q 或到达数组末尾后退出数组以读回名称。当我使用此代码时,程序将返回到 while 循环的开头,而不会中断 for 循环。
for (int i = 0; i < 100; i++)
{
while (true)
{
cout << "Enter Player Name (Q to quit): ";
getline(cin,playerName[i]);
if (playerName[i] == "Q" || playerName[i] == "q")
break;
cout << "Enter score for " << playerName[i] << ": "<< endl << endl;
}
}
根据您的描述,while (true)
似乎完全是多余的!!
所以你应该简单地做:
int i;
for (i = 0; i < 100; i++)
{
cout << "Enter Player Name (Q to quit): ";
getline(cin,playerName[i]);
if (playerName[i] == "Q" || playerName[i] == "q")
break;
cout << "Enter score for " << playerName[i] << ": "<< endl << endl;
}
此时,您可以使用i
来判断用户输入了多少个名称。
这是明智的goto
可能是最佳选择的罕见情况之一。
for (...)
{
while (...)
{
if (...)
goto exit_loop;
}
}
exit_loop:;
有些语言允许您在for
上贴上标签并在break
中使用它,但 C 和 C++ 不在其中。 将整个循环嵌套提取到其自己的函数中也是有意义的,允许您使用 return
退出两个循环,但这在上下文中可能不起作用。
我个人认为,正如其他答案所建议的那样,这种goto
的使用比外循环中的布尔值+if
更容易理解,但理性的人可能不同意这一点。
如果我
正确阅读了您的问题,那么您不需要while循环。 如果没有那个 while 循环,break 将退出 for 循环,然后您可以输入一个单独的 for 循环(从 1 到 100)来打印数组的内容。
如果用户在任何时候输入的名称少于 100 个,则第二个 for 循环将从 1 变为 i,并在此过程中输出每个数组条目。
我正在回答标题 - 将两个循环包装在一个函数中:
void foo()
{
for (;;)
while (true)
if (/* something */)
return;
}
否则我同意巴拉克马诺斯,你甚至不需要两个循环。
添加一个布尔变量来告诉您内部循环是否已中断:
bool broken = false;
for (int i = 0; i < 100; i++)
{
while (true)
{
cout << "Enter Player Name (Q to quit): ";
getline(cin,playerName[i]);
if (playerName[i] == "Q" || playerName[i] == "q") {
broken = true;
break;
}
}
cout << "Enter score for " << playerName[i] << ": "<< endl << endl;
}
if (broken) {
break;
}
}
使用布尔变量来声明您已从内部循环中断,然后检查它并在需要时从外部循环中断。
尝试以下操作
bool done = false;
int i = 0;
for ( ; i < 100 && !done; i++ )
{
cout << "Enter Player Name (Q to quit): ";
getline(cin,playerName[i]);
if ( !( done = playerName[i] == "Q" || playerName[i] == "q" ) )
{
cout << "Enter score for " << playerName[i] << ": "<< endl << endl;
// some code for entering the score
}
}
考虑到您需要保留变量 i 以了解输入了多少玩家。所以我在循环外定义了 i。
相关文章:
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- while循环中while循环的时间复杂度是多少
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 擦除while循环中迭代的元素
- 为什么我不能在 while 循环中创建线程?
- 退出简单while循环时出现问题
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 嵌套While循环不起作用(C++问题)
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 使用 GMP 的 while 循环出现问题
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 为什么在 while 循环中返回表达式不起作用
- 如何使用 do while 循环确定最高值和最低值
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- OpenCV QT,显示视频的帧(不使用while循环)
- 输入循环 while 函数
- c++中的循环(while)
- 为什么这段代码没有循环(while)