摸你穷 发表于 2021-12-12 22:09:37

break语句的一些问题

本帖最后由 摸你穷 于 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++

wp231957 发表于 2021-12-12 22:20:09

啥代码啊,乱七八糟的,纯测试代码??

摸你穷 发表于 2021-12-12 22:37:39

wp231957 发表于 2021-12-12 22:20
啥代码啊,乱七八糟的,纯测试代码??

难道我写的代码不能执行?我已经说了我的问题,你也是老鱼友了不可能不知道我想要的答案,无非是不想看。
如果您不想看还请不要回复谢谢

人造人 发表于 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++)
      |                  ^~
$

摸你穷 发表于 2021-12-12 23:10:43

人造人 发表于 2021-12-12 22:44
代码确实无法通过编译

我改了现在试试

ljy5011 发表于 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 就不执行后面的语句

jackz007 发表于 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 时,内层完成最后一次循环。

摸你穷 发表于 2021-12-13 23:04:21

jackz007 发表于 2021-12-13 13:13
#include
main()
{


嗯我懂了,但我还有点问题当执行到break跳出内层循环后,执行if就不继续执行for了对吗?
还有就是有i++为什么i还是0了?

jackz007 发表于 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 的时候,循环结束。

摸你穷 发表于 2021-12-14 20:22:48

jackz007 发表于 2021-12-13 23:33
这句代码的意思是, i 是循环变量,这个循环将运行 10 次,i 的值从 0 开始,每次循环完毕 i...

对啊i=10才结束那我后面打印i的值为什么是0了?

jackz007 发表于 2021-12-14 21:43:06

摸你穷 发表于 2021-12-14 20:22
对啊i=10才结束那我后面打印i的值为什么是0了?

       绝对不可能,循环结束的时候,i 和 j 的值都一定是 10 !

摸你穷 发表于 2021-12-14 21:52:41

jackz007 发表于 2021-12-14 21:43
绝对不可能,循环结束的时候,i 和 j 的值都一定是 10 !

i = 0 j = 3

jackz007 发表于 2021-12-14 22:40:19

本帖最后由 jackz007 于 2021-12-14 22:44 编辑

摸你穷 发表于 2021-12-14 21:52
i = 0 j = 3

      抱歉,在 i = 0 , j = 3 的时候,蓝色的 break 跳出了内层循环,到外层后,红色的 break 又跳出了外层循环,所以,循环结束以后 i = 0,j = 3
页: [1]
查看完整版本: break语句的一些问题