c语言中怎样替换goto语句?

如下代码,在3层for循环里,当条件2满足时,就要跳出这3层循环,重新执行while循环,
这里用的是goto语句来跳出的,条件2不满足就要执行goto过去的代码后再重新while循环,
要怎么改成不用goto语句的呢?

 while(1){
                if(条件1){
                        //跳出while循环
                        break;
                }
                for(i=0; i<7; i++)
                {
                    for(j=0; j<7; j++)
                    {
                        for(k=0; k<7; k++)
                        {
                            if(条件2)
                            {
                                goto a;
                            }
                        }
                    }
                }
                a:
                if(i == 7)
                {
                    ...
                } else {
                    break;
                }

 }

我觉得你已经进入了思维的误区了,C语言在当初开发过程中既然设定了有goto语句这个功能,就是为了满足一些特殊场景,
在这种场景中,使用goto语句能够很好的解决问题,并且使代码简洁,只不过在新手开发过程中,理解代码执行的流程能力较弱,此时使用goto语句
容易引起流程混乱,所以书上说尽量不要使用goto语句。
但是并没有说不能使用,你只需要把跳转语句标识写的标准、易懂一些就行,比如 FUNNAME_goto_break_sig,这样才能使程序更加健壮。
看了其它的人的方法,觉得都没有你原来的代码简洁,不是吗?

方法一:
while(1)
{
bool bJumpFlag_1 = false;
bool bJumpFlag_2 = false;
if(条件1)

//跳出while循环
break;

for(i = 0; i < 7; i++)
{
for(j = 0; j < 7; j++)
{
for(k = 0; k < 7; k++)
{
if(条件2)
{
if(i == 7)
{
//需要执行的代码
bJumpFlag_1 = true;
}
else
{
bJumpFlag_2 = true;
}
break;
}
}
if(bJumpFlag_1 == true)
break;
}
if(bJumFlag_1 == true)
break;
}
if(bJumpFlag_2 == true)
break;
}

GOTO语句某些时候用用是可以的,我之前就用过,没什么事情

只能在 j 层循环判断 k 值,如果 k 值比设定值小,说明是 break,出来的,再继续 break,然后再在 i 层判断 j 值,继续 break;

看来还是逃不了用goto的命

方法一:
while(1)
{
bool bJumpFlag_1 = false;
bool bJumpFlag_2 = false;
if(条件1)

//跳出while循环
break;

for(i = 0; i < 7; i++)
{
for(j = 0; j < 7; j++)
{
for(k = 0; k < 7; k++)
{
if(条件2)
{
if(i == 7)
{
//需要执行的代码
bJumpFlag_1 = true;
}
else
{
bJumpFlag_2 = true;
}
break;
}
}
if(bJumpFlag_1 == true || bJompFlag_2 == true) 刚刚漏了bJumpFlag_2
break;
}
if(bJumpFlag_1 == true || bJompFlag_2 == true) 刚刚漏了bJumpFlag_2
break;
}
if(bJumpFlag_2 == true)
break;
}


嵌入汇编
用汇编里面的跳转语句
也可以达到goto语句的作用

可以通过设置标签flag来跳出循环

goto 语句要慎用,但不是不能用,它其实就是汇编里的jmp指令,跳转很高效直接,但 会破坏程序的模块化和可读性。这个是可以取舍的。
其实java里提供的break语句也是可以加标签的,就是goto的限制性替换。

可以通过设置标签flag来跳出循环,转向另外一个

把要用到的代码代替goto就好

bool  flag_i = 0;
 while(1){
                if(条件1){
                        //跳出while循环
                        break;
                }
                for(i=0; i<7; i++)
                {
                    for(j=0; j<7; j++)
                    {
                        for(k=0; k<7; k++)
                        {
                            if(条件2)
                            {
                                                              flag_i = i;
                                                                i = 7;
                                                                j = 7;
                                break;
                            }
                        }
                    }
                }

                if( flag_i== 7 )
                {
                    ...
                } else {
                    break;
                }

 }