zoukankan      html  css  js  c++  java
  • c语言里面你不知道的break与switch,contiune的用法

          前言:最近上完课在宿舍闲来无事,就拿起了C Primer Plus 这本书看,是自己入门编程的第一门语言;看了一些基本语法知识点,最让我需要总一下的是就是标题所说的这个语法知识点,记得大一的时候去考计算机二级的时候,里面的好多选择有这个,当时在这里弄晕了,所以想一想,还是总结一下,加深理解与印象。

    一、switch语句的用法:

    看到这个就让我想起了在学习五一单片机里的矩阵键盘的写法,就用到了这个,哈哈。嗯,还是先来看一下它的基本结构和用法:

    1、格式:

    switch (表达式)

    {

            case  常量表达式1:  语句1;

            case  常量表达式2:  语句2;

            .......

           case   常量表达式n:     语句n;

           default           :   语句n+1;

    }

    说明:

    第一、所有case后面的常量表达式为便于描述我们姑且称为标签,这些标签都只能是:a、枚举常量(有些地方叫枚举元素),b、数值常量,c、字符常量 ,d、常变量,e、宏名中的一种,注意普通变量,枚举变量不能作为标签使用的。

    第二、swich 后面括号里的"表达式"允许是任何类型。

    第三、执行完一个case语句后,流程控制就转移到下一个case语句继续执行下去,"case”常量表达式只是起语句标号的作用,并不是在该处进行条件判断。在执行swtich语句时,根据switch()中表达式的值找到与之匹配的case字句,就从此case 子句开始执行下去,不再进行判断。

    第四、switch 是选择不是循环,如果在switch语句中出现了break语句,并且该语句的功能只是退出switch语句转去执行它下面的语句。在switch中出现continue是错误的除非switch本身就属于for或while循环的一部分。

    2、下面我们来用代码来分析:

    #include  <stdio.h>
    
    int main(void)
    {
        int val ;
        
        printf("请输入您要进入的楼层: ");
        scanf("%d",&val);
        
        switch(val)
        {
            case 1:
                printf("1层开
    ");
                break;
            case 2:
                printf("2层开
    ");
                break;
            case 3:
                printf("3层开
    ");
                break;
            default:
                printf("没有按到这一层
    ");
                break;    
        }
        return 0;
    }

    演示结果如下(可以看出,只要val等于case后面的常量表达式,就会找到这个case语句进行执行,同时因为有break语句,所以他不会继续执行下去):

    请输入您要进入的楼层: 2
    2层开

    二、break语句的用法:

    break语句的用法主要要注意以下几点:

    a、break如果用于循环是用来终止循环

    b、break如果用于switch ,则是用于终止switch

    c、break 不能直接用于if语句,除非if属于循环内部的一个子句,我们可以看下面一个例子(最后他执行的结果是什么都没显示):

    #include  <stdio.h>
    
    int main(void)
    {
        int i=0;
        for(i=0;i<3;++i)
        {
            if(3>2)
             break;// break语句虽然是if内部的语句,但是break终止的却是外部的for循环语句
            printf("hh
    ");
        }
        return 0;
    }

    d、在多层循环中,break语句只能终止离他距离最近的那个循环,请看下面的例子:

    #include  <stdio.h>
    
    int main(void)
    {
        int i ,j;
        for(i=0;i<3;++i)
        {
            for(j=1;j<4;++j)
            {
                break;
            }
            printf("同志们好
    ");
        }
        return 0;
    }

    输出结果(距离最近的那个for语句在执行到break语句就结束了这个for循环):

    同志们好
    同志们好
    同志们好

    e、在多层switch嵌套中,break只能终止距离它最近的switch语句:

    #include  <stdio.h>
    
    int main(void)
    {
        int x=1,y=0,a=0,b=0;
        switch(x)
        {
             case 1:
                 switch(y)
                 {
                   case 0:
                     a++;
                     break;//当x=1的时候就执行最外面那个switch里面的第一个case 语句,然后里面的switch语句中的y=0,就执行case 0,然后到这个break 语句就停止往下执行了。
                  case 1:
                       b++;
                       break;
                }
              break;  //执行到这里就停止往下执行了
              case 2:
                  a++;
                  b++;
                  break;
        }
        printf("the result is %d %d
    ",a,b);
        return 0;
    }

    演示结果:

    the result is 1 0

    三、continue语句的用法:

    它的用法是跳过本次循环余下的语句,转去判断是否需要执行下次循环,格式如下:

    a、while(表达式)

    {

       A;

       B;

       continue;//如果执行该语句,则在执行完该语句后,会执行表达式,语句C和D都会被跳过,不会被执行;

       C;

       D;

    }

    b、for(  1  ; 2   ; 3)

    {

       A;

       B;

       continue;//如果执行完该语句后,会直接执行表达式3,而不会执行下面的语句C和D;

      C;

      D;

    }

    下面来看一个例子:

    #include <stdio.h>
    int main(void)
    {
        int i ;
        char ch ;
        scanf("%d",&i);
        printf("i = %d
    ",i);
        
        while(ch =getchar() != '
    ')//这里的意思是判断输入的数据是否有换行符,如果有的话停止运行这个while语句,而且这个语句是为了防止用户输入了非法数据
                    continue;
        int j;
        scanf("%d",&j);
        printf("j = %d 
    ",j);
        
        return 0;
    }

    演示结果如下():

    1 jkldjk   // 1后面的数据不符整形数据类型,所以被丢掉了,所以 i的值为1
    i = 1
    jkdlajfdkl     //这个输入的是垃圾数值,不符合数据类型,所以输出j的值为0。
    j = 0
  • 相关阅读:
    java 对象导论
    Centos7 中打开和关闭防火墙及端口
    logstash用jdbc插件将数据库内容导入elasticsearch时间字段相差5小时
    git本地库中配置多个sshkey
    elasticsearch报Fielddata is disabled on text fields by default
    centos7环境下安装nginx
    请问一下大佬们,我的项目compile编译的时候总是编译报错
    Elasticsearch安装head插件
    mysql配置主从同步
    centos7中提升用户权限
  • 原文地址:https://www.cnblogs.com/1121518wo/p/10920221.html
Copyright © 2011-2022 走看看