【从零开始的 C 语言笔记】第二十三篇-Switch条件式

不怎麽重要的前言

上一篇介绍了两个小题目,稍微带过解题的思路,以及多重回圈(巢状回圈)的概念。

现在我们来试着把所学的东西组合起来看看吧!


上次的小作业--九九乘法表

#include <stdio.h>

int main()
{
    for(int i = 2; i<=9; i++){
        for(int j = 1; j<=9; j++){
            printf("%d x %d = %d\n", i, j, i*j);
        }
        printf("\n");
    }

    return 0;
}

Switch条件式?

大家应该有学过if条件式了,基本上是一个需要判断式为true才执行的条件式,不晓得大家在写等同多个不同数值时,要执行不同结果的if条件式,有没有感觉到疲累感。

如同以下的if条件式:

#include <stdio.h>

int main()
{
    char data;

    printf("plz input a char: ");
    scanf("%c", &data);

    if (data == 'a'){
        printf("mode 1.\n");
    }
    else if (data == 'b'){
        printf("mode 2.\n");
    }
    else if (data == 'c'){
        printf("mode 3.\n");
    }
    else{
        printf("mode default.\n");
    }

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211103/20142565H4NagRQoGS.png

如果是漫长的判断等同某个数值的if条件式,也可以转换为这种的switch条件式,虽然这个语法并不是必要学的,但有兴趣的话,跑出来的结果也会是一样的:

#include <stdio.h>

int main()
{
    char data;

    printf("plz input a char: ");
    scanf("%c", &data);

    switch (data){
    case 'a':
        printf("mode 1.\n");
        break;
    case 'b':
        printf("mode 2.\n");
        break;
    case 'c':
        printf("mode 3.\n");
        break;
    default:
        printf("mode default.\n");
    }
    
    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211103/20142565yFGkBdofso.png


正式使用

  1. 规则

(1)基本格式

switch (data){
case 'a':
    printf("mode 1.\n");
    break;
case 'b':
    printf("mode 2.\n");
    break;
case 'c':
    printf("mode 3.\n");
    break;
default:
    printf("mode default.\n");
}

https://ithelp.ithome.com.tw/upload/images/20211103/201425654BrVWfpeyO.png

(2) case的body结尾需补上break用以跳出switch,否则会出现问题。
a. break只会跳出switch条件式,而不执行剩下的。
https://ithelp.ithome.com.tw/upload/images/20211103/20142565mSLKzLwkKe.png

b. 出现错误的范例(未加break)

#include <stdio.h>

int main()
{
    char data;

    printf("plz input a char: ");
    scanf("%c", &data);

    switch (data){
    case 'a':
        printf("mode 1.\n");

    case 'b':
        printf("mode 2.\n");

    case 'c':
        printf("mode 3.\n");

    default:
        printf("mode default.\n");
    }

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211103/20142565PH81XLRmAw.png

  1. 应用
    输入三次成绩并判断成绩等级为多少。
    (可以看出在switch内的break只会跳出switch条件式,不会也跳出外面的for回圈。)
#include <stdio.h>

int main()
{
    int data;

    for(int i = 0; i<3; i++){
        printf("plz input a int: ");
        scanf("%d", &data);

        printf("Case %d: ", i+1);
        switch (data/10){
        case 10:
            printf("A++\n");
            break;
        case 9:
            printf("A\n");
            break;
        case 8:
            printf("B\n");
            break;
        case 7:
            printf("C\n");
            break;
        case 6:
            printf("D\n");
            break;
        default:
            printf("F\n");
        }
    }

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211103/20142565psrmieHCdx.png


看到这里就介绍完switch条件式的用法了,这是一个比较少使用到的语法,其实不会也没关系,不过有兴趣的话也可以使用看看。

下一篇我们来介绍程序设计的流程图怎麽写吧!


<<:  [Day32] Hexo - 修改主题样式及一些问题排除

>>:  【从零开始的 C 语言笔记】第二十四篇-程序设计的流程图制作

DAY 19 『 连接 API 实作 - 天气 APP 』Part1

今天会分享如何连接 API 实作出天气 APP。 具体的说是 HTTP 请求天气站点的 API,取得...

企划实现(12)

FB登入 第10步:开启 /app/res/values/strings.xml 档案。 FB会自动...

升级AD树系及网域等级

各位先进好 如果网域中所有DC作业系统皆为Windows Server 2012 R2 standa...

[12] [烧瓶里的部落格] 02. 定义和使用资料库 - 使用 SQLite

什麽是 SQLite SQLite 是遵守ACID的关联式资料库管理系统,基於单一文件所组成且格式定...

DAY 28- BIP32- HD wallet

「BIP BIP BIP 」 BIP 由於区块链没有一个中心系统,在协议上没有办法由中心统一更新, ...