我想摆脱这个goto
声明。任何人都可以告诉我相同的逻辑。下面的代码不是我想要修改的确切代码,但它将支持我的问题。在评论这篇文章时请不要问代码的重要性,因为它只是一个例子。
int result[i][j];
for (int i = 0; i<100; i++)
{
for (j = 0; j<100; j++)
{
result[i][j] = j++;
if (j == 80)
goto break1;
}
}
break1:
…;
答案 0 :(得分:4)
将这些循环放在一个函数中,给它一个正确的名称,并在完成时return;
。如果它足够复杂,需要两个循环,那就值得一个名字。
一个完成的标志很难读,所以你应该将该结构放在它自己的函数中,使其过时。
例外仅适用于您无法在本地处理的错误。使用它们通知更高级别的功能,你无法修复的东西出错,而不是发生了应该发生的事情。
答案 1 :(得分:2)
我会看到三种可能的解决方案。
return
答案 2 :(得分:1)
使用布尔值从for循环中断。
int result[i][j];
bool cont = 1;
for (int i =0;i<100;i++)
{
for(j = 0;j<100;j++)
{
result[i][j] = j++;
if(j == 80)
{
cont = 0;
break;
}
}
if (cont == 0)
break;
}
break1;
(注意:未在真实编译器上测试过)。
答案 3 :(得分:1)
由于你想要打破两个循环,你必须通知外部循环。你可以通过一个检查它的布尔值来做到这一点:
bool break_loop = false;
for (int i = 0; i < 100; ++i) {
for (int j = 0; j < 100; ++j) {
if (j == 80) {
break_loop = true;
break;
}
}
if (break_loop) break;
}
答案 4 :(得分:0)
int result[i][j];
for (int i = 0; i<100; i++)
{
for (j = 0; j<100; j++)
{
result[i][j] = j++;
if (j == 80)
{
i = 100;
break;
}
}
}
答案 5 :(得分:0)
我有时喜欢更改控制变量
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
/* work */
if (j == 80) i = j = 100; // 100 makes both loops terminate
}
}
答案 6 :(得分:0)
int result[i][j];
for (int i = 0; i<100; i++)
{
int j;
for (j = 0; j<100; j++)
{
result[i][j] = j++;
if (j == 80)break;
}
if(j == 80) break;
}
知道这是一个老问题,但是可以简单地修改