XiaoBai10 发表于 2020-1-9 16:47:47

continue语句与break语句

continue语句在跳出do while或者while循环的时候直接就短路,从放continue语句开始后面语句都不见了,请问这是我代码的问题还是continue语句原本就这样定义的
而break语句不会短路,仅仅是跳过了循环,后面语句还是会执行
代码如下:
    //while循环
    i = 1;
    while (i <= 9)
    {
      printf("while循环九九乘法表:");
      j = 1;
      while(j <= i)
      {
            if (j == 5)
            {
                break;            }
            printf("%d * %d = %-2d", j , i, i * j);
            j++;

      }
      printf("%c",HC);
      i++;
    }
    //do while循环九九乘法表
    i = 1;
    do
    {
      printf("%s", F);
      //%s访问字符串常量,%c是访问字符,大概,先这样解释一下
      j = 1;
      do
      {
            if (j == 5)
            {
                continue;
            }
            printf("%d * %d = %-2d", j , i, i * j);
            j++;

      }
      while(j <= i);
      putchar('\n');
      i++;
    }
    while(i <= 9);
    printf("......\n");
    return 0;
}

sunrise085 发表于 2020-1-9 17:28:52

首先回答你的技术性问题。break和continue都是在循环中跳出循环用的,二者的相同点:都只本层循环有效。二者的差别是,break直接终止循环,continue是跳出本次循环,继续下一次循环。
以你的代码片段为例。
#include <stdio.h>
int main()
{
    int i,j;
    //while循环
    i = 1;
    while (i <= 9)
    {
      printf("while循环九九乘法表:");
      j = 1;
      while(j <= i)
      {
            if (j == 5)
            {
                break;            }
            printf("%d * %d = %-2d", j , i, i * j);
            j++;

      }
      printf("\n");//这里不知道你的那个变量是什么我修改为了回车。
      i++;
    }
return 0;
}
当j==5成立时,用break跳出while(j<=i)循环,而不会跳出while(i<=9)的循环,因此会得到如下结果:
while循环九九乘法表:1 * 1 = 1   
while循环九九乘法表:1 * 2 = 2   2 * 2 = 4   
while循环九九乘法表:1 * 3 = 3   2 * 3 = 6   3 * 3 = 9   
while循环九九乘法表:1 * 4 = 4   2 * 4 = 8   3 * 4 = 124 * 4 = 16
while循环九九乘法表:1 * 5 = 5   2 * 5 = 103 * 5 = 154 * 5 = 20
while循环九九乘法表:1 * 6 = 6   2 * 6 = 123 * 6 = 184 * 6 = 24
while循环九九乘法表:1 * 7 = 7   2 * 7 = 143 * 7 = 214 * 7 = 28
while循环九九乘法表:1 * 8 = 8   2 * 8 = 163 * 8 = 244 * 8 = 32
while循环九九乘法表:1 * 9 = 9   2 * 9 = 183 * 9 = 274 * 9 = 36

在第二段代码双层do…while循环中,由于你的continue跳出内层do…while循环,使得当i=5时,j值加到5之后,就在内层do…while中一直循环,遇到if(j==5)就会跳出本次循环,而无法改变j的值,因而内层循环无法停止。

jackz007 发表于 2020-1-9 17:41:29

      break 会跳出并结束循环,continue 只会结束本次循环,开始下一次循环。

      九九乘法表似乎根本就没有必要使用 break 和 continue 语句
#include <stdio.h>

int main(void)
{
      int i , j                                                 ;
      printf("\t\twhile循环九九乘法表:\n")                     ;
      i = 1                                                   ;
      while (i <= 9){
                j = 1 ;
                while(j <= i) {
                        if(j > 1) printf(" ")                     ;
                        printf("%dx%d=%2d" , j , i , i * j)       ;
                        j ++                                    ;
                }
                printf("\n")                                    ;
                i ++                                              ;
      }
      printf("\n\n")                                          ;
      printf("\t\tdo while循环九九乘法表:\n")                  ;
      i = 1                                                   ;
      do {
                j = 1 ;
                do {
                        if(j > 1) printf(" ")                     ;
                        printf("%dx%d=%2d" , j , i , i * j)       ;
                        j ++                                    ;
                } while(j <= i)                                 ;
                printf("\n")                                    ;
                i ++                                              ;
      } while(i <= 9)                                           ;
      printf("\n")                                              ;
}
      编译、运行实况:
C:\Bin>cl x.c
用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.00.24215.1 版
版权所有(C) Microsoft Corporation。保留所有权利。

x.c
Microsoft (R) Incremental Linker Version 14.00.24215.1
Copyright (C) Microsoft Corporation.All rights reserved.

/out:x.exe
x.obj

C:\Bin>x
                while循环九九乘法表:
1x1= 1
1x2= 2 2x2= 4
1x3= 3 2x3= 6 3x3= 9
1x4= 4 2x4= 8 3x4=12 4x4=16
1x5= 5 2x5=10 3x5=15 4x5=20 5x5=25
1x6= 6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7= 7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8= 8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9= 9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81


                do while循环九九乘法表:
1x1= 1
1x2= 2 2x2= 4
1x3= 3 2x3= 6 3x3= 9
1x4= 4 2x4= 8 3x4=12 4x4=16
1x5= 5 2x5=10 3x5=15 4x5=20 5x5=25
1x6= 6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7= 7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8= 8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9= 9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81


C:\Bin>

XiaoBai10 发表于 2020-1-10 09:19:24

jackz007 发表于 2020-1-9 17:41
break 会跳出并结束循环,continue 只会结束本次循环,开始下一次循环。

      九九乘法表似 ...

我只是想试试能不能在合适的地方跳出
页: [1]
查看完整版本: continue语句与break语句