如何突破内部 while 循环中的 for 循环

How do I break out of the for loop inside an inner while loop

本文关键字:循环 while for 内部 何突破 突破      更新时间:2023-10-16

对于这个循环,我需要能够在一个长度必须为 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。