鱼C论坛

 找回密码
 立即注册
查看: 1171|回复: 12

[已解决]break语句的一些问题

[复制链接]
发表于 2021-12-12 22:09:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 摸你穷 于 2021-12-12 23:10 编辑

#include<stdio.h>

int main()
{
        int i,j;

        for(i = 0;i < 10;i++)
        {
                for(j = 0;j < 10;j++)
                {
                        if(j == 3)
                        {
                                break;
                        }
                }
                if(j == 3)
                {
                        break;
                }
        }
        printf("i = %d,j = %d \n",i,j);

        return 0;
}



打印出来 i=0 ,j=3         我的问题是i为什么是0 而不是3

还有for(i=0;i < 10;i++)这段代码执行顺序是怎样的。
是先i = 0 在判断 i < 10 在i++然后在执行循环
还是先执行循环在i++

最佳答案
2021-12-14 22:40:19
本帖最后由 jackz007 于 2021-12-14 22:44 编辑


        抱歉,在 i = 0 , j = 3 的时候,蓝色的 break 跳出了内层循环,到外层后,红色的 break 又跳出了外层循环,所以,循环结束以后 i = 0,j = 3
  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-12 22:20:09 From FishC Mobile | 显示全部楼层
啥代码啊,乱七八糟的,纯测试代码??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-12 22:37:39 | 显示全部楼层
wp231957 发表于 2021-12-12 22:20
啥代码啊,乱七八糟的,纯测试代码??

难道我写的代码不能执行?我已经说了我的问题,你也是老鱼友了不可能不知道我想要的答案,无非是不想看。
如果您不想看还请不要回复谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-12 22:44:00 | 显示全部楼层
摸你穷 发表于 2021-12-12 22:37
难道我写的代码不能执行?我已经说了我的问题,你也是老鱼友了不可能不知道我想要的答案,无非是不想看。 ...

代码确实无法通过编译
$ cat main.c
%include<stdio.h>

int main()

int i,j;
for(i = 0;i < 10 ;i++)
{
         for(j = 0;j < 10; j++)
         {
              if(j == 3)
               {
                 break;
               }
         }
          printf("i = %d,j = %d\n",i ,j);

         return 0;
}
$ gcc-debug -o main main.c
main.c:1:1: error: expected identifier or ‘(’ before ‘%’ token
    1 | %include<stdio.h>
      | ^
main.c:6:1: error: expected identifier or ‘(’ before ‘for’
    6 | for(i = 0;i < 10 ;i++)
      | ^~~
main.c:6:13: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
    6 | for(i = 0;i < 10 ;i++)
      |             ^
main.c:6:20: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘++’ token
    6 | for(i = 0;i < 10 ;i++)
      |                    ^~
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-12 23:10:43 | 显示全部楼层
人造人 发表于 2021-12-12 22:44
代码确实无法通过编译

我改了现在试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-13 10:49:30 | 显示全部楼层
首先定义的是main 函数下的int i,j; 并非是for(int i=0....)(局部作用域)
所以在for 循环结束以后,i和j的值都会赋值存储进去
当i=0时 进入for内循环j=0,判断if(j==3)是否成立,
当j=3时侯满足条件,break 跳出当层循环(并非整个循环),所以for(j=0;....) 这个循环就结束了
但是仍然会执行循环之后的代码,所以之后代码也是判断 if(j==3)  也是成立的,跳出外层循环,i++
应该是要执行的,但是遇到break 跳出循环(后面的语句不在执行),i++就不执行了,所以i还是为0
j为3


for循环条件成立  进入循环里,  最后执行i++, 在进行判断.......
如果遇到break 就不执行后面的语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-12-13 13:13:28 | 显示全部楼层
本帖最后由 jackz007 于 2021-12-13 13:54 编辑

#include<stdio.h>
main()
{
        int i , j                     ;
        for(i = 0 ; i < 10 ; i ++)
        {
               
for(j = 0 ; j < 10 ; j ++)
                {
                        if(j == 3)
                        {
                                break ;  // break 属于蓝色 for 循环,跳出蓝色 for
                        }
                }

                if(j == 3)
                {
                        break ; // break 属于红色 for 循环,跳出红色 for
                }
        }

        printf("i = %d,j = %d \n" , i , j) ;
        return 0 ;
}
        嵌套循环一定是外层走一步,内层走一圈,例如,就本例而言,红色代码的是外层循环,蓝色代码是内层循环。外层循环 i = 0 的时候,内层循环会从 j = 0 ~ 9 完成一次循环, i = 1 的时候,内层依然是从 j = 0 ~ 9 完成一次循环,一直到 i = 9 时,内层完成最后一次循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-12-13 23:04:21 | 显示全部楼层

嗯我懂了,但我还有点问题当执行到break跳出内层循环后,执行if就不继续执行for了对吗?
还有就是有i++为什么i还是0了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-13 23:33:13 | 显示全部楼层
摸你穷 发表于 2021-12-13 23:04
嗯我懂了,但我还有点问题当执行到break跳出内层循环后,执行if就不继续执行for了对吗?
还有就是有i++ ...
        for(i = 0 ; i < 10 ; i ++)  
        这句代码的意思是, i 是循环变量,这个循环将运行 10 次,i 的值从 0 开始,每次循环完毕 i 的值增加 1,到 i = 10 的时候,循环结束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-14 20:22:48 | 显示全部楼层
jackz007 发表于 2021-12-13 23:33
这句代码的意思是, i 是循环变量,这个循环将运行 10 次,i 的值从 0 开始,每次循环完毕 i  ...

对啊i=10才结束那我后面打印i的值为什么是0了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-14 21:43:06 | 显示全部楼层
摸你穷 发表于 2021-12-14 20:22
对啊i=10才结束那我后面打印i的值为什么是0了?

       绝对不可能,循环结束的时候,i 和 j 的值都一定是 10 !
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-14 21:52:41 | 显示全部楼层
jackz007 发表于 2021-12-14 21:43
绝对不可能,循环结束的时候,i 和 j 的值都一定是 10 !

i = 0 j = 3
5.PNG
6.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-14 22:40:19 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-12-14 22:44 编辑


        抱歉,在 i = 0 , j = 3 的时候,蓝色的 break 跳出了内层循环,到外层后,红色的 break 又跳出了外层循环,所以,循环结束以后 i = 0,j = 3
  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 07:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表