(我知道有很多关于此问题的帖子,但是在连续搜索5分钟后我找不到使用C或C ++的帖子)
我想问一下如何在内循环内部突破外循环。
示例:
while(true){
for(int i = 0; i < 2; i++){
std::cout << "Say What?";
//insert outer-loop break statement here
}
}
以上只是一些伪代码。不要担心逻辑。
答案 0 :(得分:7)
将循环放在一个函数中,然后从返回。
void RunMyLoop (...)
{
while (true)
{
for (int i = 0; i < 2; i++)
{
std::cout << "Say What?";
if (SomethingHappened)
return;
}
}
}
您可以使用goto
。
while (bKeepGoing)
{
for (int i = 0; i < 2; i++)
{
std::cout << "Say What?";
if (EventOccured)
{
goto labelEndLoop;
}
}
}
labelEndLoop:
//...
你也可以使用布尔来&#34;打破&#34;它强>
bool bKeepGoing = true;
while (bKeepGoing)
{
for (int i = 0; i < 2; i++)
{
std::cout << "Say What?";
if (EventOccured)
{
bKeepGoing = false;
break;
}
}
}
答案 1 :(得分:3)
如果你不想用它来创建一个函数,这是一个选项:
bool ok = true;
while(ok){
for(int i = 0; i < 2; i++)
{
std::cout << "Say What?";
//insert outer-loop break statement here
if(/*somthing here*/)
{
ok = false;
break;
}
}
}
答案 2 :(得分:2)
你可以使用goto。但我会这样做。
while(true){
bool breakMe = false;
for(int i = 0; i < 2; i++){
std::cout << "Say What?";
breakMe = true;
break;
}
if ( breakMe )
break;
}
答案 3 :(得分:2)
正如其他人使用函数或在C ++ 11中编写的那样,返回的lambda是最好的情况。但是如果你必须打破更多不同的嵌套循环,goto可能是最好的。
以下伪代码无法使用函数实现:
while (1) {
// code
while (1) {
// code
while (1) {
// code
if (cond1)
break one level;
if (cond2)
break two level;
}
}
}
使用goto可以:
while (1) {
// code
while (1) {
// code
while (1) {
// code
if (cond1)
goto level_a; //break one level;
if (cond2)
goto level_b; // break two level;
}
level_a:
}
level_b:
}
重要的是保持一致。最好是使用'algorithm'和无原始循环。
答案 4 :(得分:1)
Blacktempel给出了更好的方法但是如果你不想使用函数或goto那么试试这个:
int break_outer_loop = 0;
while(break_outer_loop == 0){
for(int i = 0; i < 2; i++){
std::cout << "Say What?";
//insert outer-loop break statement here
if(CONDITION FOR OUTER BREAK) {
break_outer_loop = 1;
break;
}
}
}
答案 5 :(得分:0)
你不能直接打破外环。尝试重构,以便您可以使用return,或设置条件,以便while循环自然结束。
bool bStop = false;
while(!bStop){
for(int i = 0; i < 2; i++){
std::cout << "Say What?";
bStop = true;
break; // ends inner loop
}
}
或
void foo(){
while(true){
for(int i = 0; i < 2; i++){
std::cout << "Say What?";
return;
}
}
}