请问如何一次跳出二个循环? goto的用法

http://topic.csdn.net/u/20080325/12/d2800b35-f2b3-4867-893b-07d6ff3a8bf4.html
我想一次跳出下面二个循环,但是下面只能跳出子循环,
for(i=0;i <5; i++)
    {
        puts("here");
        for(j=0;j <5;j++)
        {
            puts("subLoop");
            break;//跳出直接运行下面的语句

        }

    }

printf("here,subLoop各执行一次");

下面高手解答:
///////////////////////////////////////////////////////////////////////////////
这真是一个很有趣的问题。想了很久,还是坠入到该不该使用goto的怪圈里。在这里我想对完全否定使用goto的人问一句:如果goto真是“罪不可恕”,为什么目前所有的语言都保留了goto这个关键字?说实话有时候很难评判某个方法是不是最好的,也许这和你想要达到的直接目的关联起来,就像在C语言里最精彩的指针,到了java却认为是最不可靠的东西(注意:不是最不好用的东西),连MS也在Net里将他封调了,即使使用也要注明“不可靠”。如果非要做一个定论,下面是我的具体想法:
1、首推goto!
没有最好的!只有最合适的。什么是最合适的?要看你最想达到的目的是什么!好,楼主说了,我的目的就是要从内层循环直接调到外层循环。因为内层循环已经把整个循环的任务完成了,为什么不能goto?如果说这样不满足“结构化编程思想”。那对不起,请不要做出跳出整个循环的设计,因为你在设计上就已经违反了结构化编程的思想了!
2、次推return
如果又要达到楼主的直接目的,又要保证“结构化编程”。那就把这部分功能设计为一个函数和方法吧。因为你的目的就是要实现一个任务然后了事。这样是最折中的做法(也许是最“完美”的做法,但你的代价是失去了灵活性,就象让一个使用了十年C语言的人突然改成java编程一样,也许反而是一种痛苦)。 (请参看《重构》一书)
3、在外层使用flag标志加break层层返回。
我真不知道,这个方法和goto的滥用有什么区别,恕我直言,这个做法简直就是那句名言“既要做××又要立牌坊”的最佳写照。如果你硬要这样。我劝你还是直接做××好了,立牌坊多累!!!
4、剩下的一些方法这里就不多说了,可能还没搞清楚楼主的意思。
个人观点,欢迎楼下拍砖。

////////////////////////////////////////////////////////////////////////////////////////////////
汗一个,这种问题有什么好争的。
自从有了结构化程序设计这个概念,goto就没有什么用武之地了,是本书都会说goto不好,要慎用,但几乎没有人会告诉那些菜鸟们,什么时候应该用goto!!!
在我看来这里就是用goto的地方,只要一个命令就可以实现目标,何必再用层层break来跳出?至于用函数封装后用return来跳出,更是真正的脱裤子放p。如果说清空流水线的问题,本来就是要跳出循环的,循环内所有的代码都必须清除掉,岂不是正好?倒是用if+break来实现,就必须反复地清流水线,这才叫低效;至于用函数,那就更别说了,还要清栈空间呢
就我的经验而言,还有一个用goto的地方,就是在结束函数前作清除工作时可以用,举个例子:
//do anything...
if (error) goto fail;
///...
if (xxx) goto fail;
///....
//success
//do somthing to release resouce
return true;
//failed
fail:
//do somthing to release resouce
return false;
不过这个用法在try/catch/finall出现以后,又被代替了(我是在用pb的时候这么用的,还算方便) 

你可能感兴趣的:(java,编程,c,工作,语言,任务)