• C语言中scanf函数与switch语句


     

    ----------------switch----------------

    1)使用格式

    switch(表达式){

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

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

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

    default: 语句n+1;

    }

    判断月份代码实现

    int main(int argc, const char * argv[]) {
        
        //定义变量
        int month;
        
        //提示用户输入一个月份
        printf("请输入一个月份,范围1-12之间:
    ");
        
        //接收用户输入的月份
        scanf("%d",&month);
        //校验
        if (month<1 || month>12) {
            printf("月份不合法!
    ");
            return 0;
        }
        
        //判断处于哪个季节
        switch (month) {
            case 12:
            case 1:
            case 2:
                printf("冬季,男人最讨厌的季节
    ");
                break;
            
            case 3:
            case 4:
            case 5:
                printf("春季,一个充满生机的季节
    ");
                break;
            
            case 6:
            case 7:
            case 8:
                printf("夏季,一个充满黑丝的季节
    ");
                break;
                
            case 9:
            case 10:
            case 11:
                printf("秋季,一个不安分的季节
    ");
                break;
            
    
        }
        
        return 0;
    }
    

    其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表 达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如 表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

    1、switch语句的表达式类型

           1)可以放一个整型的变量 int num = 10;switch (num)

           2)可以放一个整形常量  switch (10)

           3)可以放一个返回值是整型的表达式   switch (5+5),num = 5+5

          4)还可以放可以转换为int类型的表达式 switch ('a'+'a')

       

    ----------case语句的穿透问题

    case语句执行的过程中,一旦进入某个分支后就会一直执行到switch结束。

    为了避免上述情况,C语言还提供了一种break语句,专用于跳出switch语句.

    ---------if分支和switch分支转换

    if语句不一定能转换成switch语句,switch语句一定能转换成if语句

    if(表达式)-------case 常量表达式

    ---------if分支和switch分支的选择

    1)分支比较多且无法穷尽或进行大量列举 时最好用if

    2)如果分支数量不是很多,但是使用if代码代码量比较大的时候,可以选用switch

    if     可以理解为   判断语句   判断性为主

    switch            选择语句   选择性为主

    ---------switch分支值得注意的地方

    1. 表达式的类型(case语句后的值)必须是整型或可以转变为整型的值 (byte、short、char和int类型)。

       整形变量    整形常量   返回值是整形的表达式   可以装换为int类型的表达式

    2) 功能代码部分可以写任意多句。

    3) case语句可以有任意多句,可以不用加括号“{}”

    4) break关键字的意思是中断,指结束switch语句,break语句为可选。

    -----------case值得注意的地方

    0) case语句格式: case  常量表达式: (空格和冒号不能省)

      1) case的值1、值2...值n只能为常数或常量,不能为变量。

       2) 如果放表达式,那么只可以是常量表达式 case 5+5:

       3) default语句的位置可以任意放 功能类似于if语句中的else。但是写在最上面会重新一次往下执行4) case的穿透问题,同样适用于 default

       5) 如果default语句放到 switch语句的最后,可以不加break

           如果不是放到最后,是必须加上break的

       6) case的值必须是整数,不能为浮点数。

       7) case 语句之后,默认的第一句话不能定义定义变量

           如果第一句话非要定义,应该加上大括号

    ----------------scanf函数(阻塞式函数)---------------- 

           如果使用这个函数,要包含一个头文件 stdio.h

           阻塞式的函数:函数执行后,会等待用户的输入,如果用户不输入任何内容,它会一直等待

         scanf函数的作用:

           从键盘接收用户输入的内容,保存到指定的变量中

         scanf函数的格式:

         

           scanf("格式控制符",输入项的地址列表);

    scanf注意

    1。当有多个 输入项时,各个地址名之间以逗号“,”分隔。输入格式和变量类型要保持一致。 

    2.scanf函数当遇到回车的时候,会结束执行

    3、接收单个变量值的时候,在输入值之前,如果我们输入了空格 回车 tab,都会被忽略

    %d%d,要求我们在键盘上输入的时候,输入两个整数,并且以空格或者回车隔开

    4,输入完第一个数以后,如果中间添加了回车 空格 tab 都会被忽略

    5      %*d按指定格式读入数据但不赋予相应的变量,作用是跳过相应的读入数据 

     %*d过一个整数

    6  此处不允许写%m.nf,但是%mf是可以

    7  要求输入分数 确输入了字符 运行结果 0.00000

    scanf运行的原理

     1)当用户输入内容后,用户输入的内容会被存放到scanf的输入缓冲区中 然后,

    scanf函数会根据格式控制的字符的要求,从输入缓冲区依次取它想要的内容

     如果 从缓冲区中取得内容和和我们的格式要求一致,则把值存放到变量中  

     如果格式不一致,则不修改变量的值 

      2)如果scanf缓冲区中还有内容,则scanf不会提示我们再次输入1、scanf的运行原理 

    pastedGraphic.png 

  • 相关阅读:
    刘汝佳,竖式问题
    二叉树
    sort
    hash
    贪心算法
    FFT,NTT 专题
    hdu 5861 Road 两棵线段树
    hdu 5862 Counting Intersections
    hdu 5833 Zhu and 772002 ccpc网络赛 高斯消元法
    hdu 5800 To My Girlfriend + dp
  • 原文地址:https://www.cnblogs.com/yilizhijiaotianxiashao-yincaiersanshijianduo/p/4726198.html
Copyright © 2020-2023  润新知