摆脱嵌入式C/C++逻辑中的后藤语句

vnjpjtjt  于 2023-08-03  发布在  C/C++
关注(0)|答案(7)|浏览(140)

我想去掉这个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:
…;

字符串

5jdjgkvh

5jdjgkvh1#

把这些循环放在一个函数中,给予它一个合适的名字,完成后给它一个return;。如果它足够复杂,需要两个循环,那么它应该有一个名字。
finished标志很难读取,因此无论如何都应该将该构造放在它自己的函数中,使其过时。
异常仅适用于无法在本地处理的错误。使用它们来通知更高级别的功能,您无法修复的事情出错了,而不是应该发生的事情发生了。

jvidinwx

jvidinwx2#

我认为有三种可能的解决办法。
1.将代码放入一个函数中,并将该函数保留为return
1.使用一个“完成”的旗帜,就像已经在Michel Keijzers,Bas in het费尔德和EvilTeach的答案中演示的那样。
1.(仅限C++)用try-catch-block包围代码段,当你想离开代码时抛出和异常。但请记住,异常通常用于错误处理。因此,只有当终止循环是错误条件的结果时,才应该使用此模式。

yk9xbfzb

yk9xbfzb3#

由于您要中断两个循环,因此必须通知外部循环。您可以使用一个布尔值来检查:

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;
}

字符串

pvcm50d1

pvcm50d14#

使用布尔值来中断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;

字符串
(note:未在真实的编译器上测试)。

nbnkbykc

nbnkbykc5#

我有时喜欢改变控制变量

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
    }
}

字符串

tzxcd3kk

tzxcd3kk6#

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;
}

字符串
知道这是一个老问题但可以简单修改

f87krz0w

f87krz0w7#

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;
        }
    }
}

字符串
break语句中断内部循环。将i设置为100,会导致外部循环结束。

相关问题