C语言学习笔记|05~分支语句2

本文介绍了switch语句的基本概念,包括其适用类型、break语句的作用以及案例间的注意事项。还通过实例演示了如何编写计算器程序和使用switch实现百分成绩转等级制。同时,解释了输入缓冲区中换行符的问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

清华计算机技术学院 |23~24节-- switch语句

1⃣️基本概念

       1. switch语句也是多选一的操作,但switch表达式必须能以整型,字符型char,和枚举型表示(即0,1,2,3,4,5,6,7,8,9,10.....),且{}不可省略。

       2. break; 的作用是跳出switch结构,执行后续语语句。

       3. 多个case之间某两个case不允许相同,若相同会报错。

int num = ...; // 某个整数值

switch (num) {
    case 1:
        // 执行当 num 等于 1 时的代码
        break;
    case 2:
        // 执行当 num 等于 2 时的代码
        break;
    // 更多 case...
    default:
        // 如果 num 不是任何一个 case,执行这里的代码
        break;
}

2⃣️练习

       问:编程实现一个简单的计算器。输入两个数字,再输入+-*/符号,输出计算结果。

#include <stdio.h>
int main() 
{
    int a;
    int b;
    char c;

    printf("请输入两个数字:\n");
    scanf("%d",&a);
    scanf("%d",&b);

    printf("请输入一个符号:\n");
    scanf(" %c",&c);// 注意在%c前的空格,用于跳过之前的换行符

    switch(c)
    {
        case '+':
            printf("%d + %d = %d",a,b,a+b);
            break;

        case '-':
            printf("%d - %d = %d",a,b,a-b);
            break;

        case '*':
            printf("%d * %d = %d",a,b,a*b);
            break;

        case '/':
            if (b == 0)
            {
                printf("wrong imput\n");
            }
            else
            {
                printf("%d / %d = %d",a,b,a/b);
            }
            break;

        default:
            printf("no calculate\n");
    }

    return 0;
}

        问:上述代码  // 注意在%c前的空格,用于跳过之前的换行符   的意义是什么?

       当使用 scanf 函数从标准输入(通常是键盘)读取数据时,输入缓冲区中的换行符(由用户按下 Enter 键产生)有时会导致问题。

1.输入缓冲区和换行符

  1. 1)输入缓冲区:当用户输入数据并按下 Enter 键时,输入的数据(包括最后的换行符 \n)被存储在输入缓冲区中。scanf 函数从这个缓冲区读取数据。

  2. 2)换行符的影响:在连续的 scanf 调用中,如果第一个 scanf 读取了数字,它不会读取后面的换行符。这个换行符留在输入缓冲区中。当接下来的 scanf 尝试读取一个字符时,它会立即读取并返回这个换行符,而不是等待用户输入新的数据。

2.解决方法:空格在 %c

  • %c 前面添加一个空格告诉 scanf 忽略任何空白字符(包括空格、制表符和换行符),直到遇到第一个非空白字符。这意味着它会跳过留在输入缓冲区中的换行符,并等待用户的下一个有效输入。

3.示例说明

scanf("%d", &num);   // 第一个scanf,假设用户输入了数字然后按了Enter
scanf("%c", &ch);    // 第二个scanf

   如果用户在输入数字后按下 Enter,第一个 scanf 只会读取数字,而换行符 \n 留在输入缓冲区中。当执行第二个 scanf 时,它会立即读取这个换行符,而不是等待新的输入。

    通过修改第二个 scanfscanf(" %c", &ch);(注意 %c 前的空格),这个问题就可以解决。现在,scanf 会首先跳过任何空白字符(包括换行符),然后等待并读取下一个非空白字符。

3⃣️共用case 语句

问:用 switch 实现百分之成绩转 等级制成绩。(分数1~10,等级A~E)

#include <stdio.h>
int main() 
{
    int a;

    printf("please imput your score:\n");
    scanf("%d",&a);

    switch(a/10)
    {
        case 10:
        case 9:
            printf("A");
            break;

        case 8:
        case 7:
            printf("B");
            break;

        case 6:
        case 5:
            printf("C");
            break;

        case 4:
        case 3:
            printf("D");
            break;

        case 2:
        case 1:
        case 0:
            printf("E");
            break;

        default:
            printf("wrong score");
     
    }

    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值