我在一个双层循环的里层用break
网上说的是只跳出里层循环,所以应该显示十层呀,可是结果却只有一个,好像break直接跳出了外层循环。
更奇怪的是,计算着一层用了一分多钟,貌似把里层的5050个循环也都循环了
如果把里层循环去掉,结果是十个结果,计算的非常快
PS:里层循环把i改了还是不行结果还是那样的
内层循环控制变量和外层控制变量是同一个i。跳出内层循环后,外层循环的条件有可能已经不存在(要求i < 10)。
里层循环使用外层循环变量,break不使用标签只能跳出当前循环在语法上是必然的,至于外层循环也结束则是满足了结束条件而非break。只需要将里层循环的变量改为新变量即可验证
break 跳出当前循环,跳出里层的循环
补充:将内层循环改成: for (int n = 0; n < 5050; n++) .... 试试
内层循环变量改一个试试,换成 int j = 0; j < 5050; j++. 你两层都用了 i,外层很容易跳出来。
break的时候看下i是几,然后往下走一步,你就知道为什么连外层循环也break了(因为这时候判断i已经大于10了,所以外层也就不再循环了)
改了里层循环的变量还是跳出外层循环,建议debug,或者精简里层循环逻辑,比如去掉里层循环的函数调用,将跳出判断逻辑改一些(必须里层循环10次)
你在外层循环,最下面输出 一句话,看看会不会执行,会执行,就是跳出里面循环
break在某种程度上终止FOR循环,在这之前循环不会跳出循环范围
内层的break条件是ifgoto()的结果为0. 你应当在调试环境里跑一跑看,如果ifgoto()从来就没返回过0,内层每次都要循环5050次。
当你把内层循环控制变量名改为i以外的变量之后, 一定不会在发生你认为的break既跳出内层循环又跳出外层循环的问题。
另外,i是只在for里起作用,但这句话应当理解为:如果在for语句里直接定义循环控制变量,循环控制变量i的作用域范围为for语句内,也就是包括了循环体。
强烈建议你使用debugger跟踪整个循环执行过程,学好for循环的内在原理。
内层的break条件是ifgoto()的结果为0. 你应当在调试环境里跑一跑看,如果ifgoto()从来就没返回过0,内层每次都要循环5050次。
当你把内层循环控制变量名改为i以外的变量之后, 一定不会在发生你认为的break既跳出内层循环又跳出外层循环的问题。
另外,i是只在for里起作用,但这句话应当理解为:如果在for语句里直接定义循环控制变量,循环控制变量i的作用域范围为for语句内,也就是包括了循环体。
强烈建议你使用debugger跟踪整个循环执行过程,学好for循环的内在原理。
其实很简单,如果你想看到底哪里错了。可以编译成汇编代码,就看的比较清楚了.
两个内部变量同名,应该使用静态变量
你这个int i的地方在外for里,所以外for里的i都是一个i,第一种你执行的时候,可能i在内for已经超过10了,这时候跳出内for,外for再判定i<10判定失败,跳出大for所以你把内for里换了另一个变量,执行的结果是咋样的,你说还是不对我们也不知道你要求的是咋样的,毕竟你这个代码不全
将跳出判断逻辑改一些
break退出当前循环,但不会跳出被包含的所有循环。
两个循环的循环变量是一样的,退出最里面的循环后不满足外面的循环所以打印一组数据就退出,建议修改变量加上打印试试
里循环和外循环的循环条件的变量换一下