C语言——switch 语句的基本格式是什么?

一、问题

C语⾔中有两个构成选择结构的语句,即构成双分⽀的让if..else 语句和构成多分⽀的 switch..case 语句,switch 语句的基本格式是什么?

二、解答

cpp 复制代码
switch (表达式)
{
case 常量表达式 1:
    语句1;
    break;

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

default:
    语句 n + 1;
}

switch 后的表达式是任意类型的表达式,case 后的常量表达式只能是整型或字符型。 它的执⾏过程是:

先求 switch 后的"表达式"的值。然后在后⾯的多个 case 中查找此值,如果找到相等的,则执⾏下⾯的对应语句,直到遇到⼀个 break 为⽌。如果没有 break 的话,将会执⾏到下⼀个 case下的语句。如果 switch 表达式的计算结果与所有 case 均不相等,则执⾏ default 后的语句。default 也可以没有,即都不相等什么也不执⾏。

cpp 复制代码
脚下留神:
    在 switch 语句中,当找到与 swith 表达式相等的 case 时,执⾏ case 下的语句。
case 下的所有语句都执⾏完成后,如果⼀直没有 break,那么程序将会执⾏到下⼀个 case,
⽽不管它的值是否与 switch 表达式相等,即多个 case 之间不具有天然的互斥性。要想使程
序执⾏完⼀个 case后的语句,⽽不进⼊下⼀个 case,必须使⽤ break 语向,使程序退出 
switch 结构。这样,后⾯的 case 也就不执⾏了。

看以下程序的执⾏结果:

cpp 复制代码
#include <stdio.h>
int main()
{
    int a, b;
    a = 4;
    switch (a % 2)
    {
    case 0:
        b = 10;
    case 1:
        b = 20;
    }
}

以上程序执⾏的结果是20。 4%2 结果是0,应该显示 10 才对呀,怎么会是20呢?原因就在于赋值语句 b=10 执⾏之后,因为没有 break 语句,那就再向下执⾏,进⼊ case 1,再执⾏ b=20,因此最后的结果显示为 20。要想让它能够显示 10,需要在 b=10 的后⾯,case 1 的前⾯加上⼀⾏"break;"(包括分号;),这样就可以得出10了。

三、总结

switch 语句不具备互斥功能,给写程序添加了⼀个⿇烦,即再多写⼀个 break,但它也为多个 case 共⽤⼀组执⾏语句提供了条件。

相关推荐
Hello.Reader34 分钟前
算法基础(十)——分治思想把大问题拆成小问题
java·开发语言·算法
一只大袋鼠36 分钟前
JavaWeb四种文件上传方式(下篇)
java·开发语言·springmvc·javaweb
TE-茶叶蛋1 小时前
深入研究 yudao-framework 模块:Java 编程能力提升指南
java·开发语言
CHANG_THE_WORLD1 小时前
C语言中的 %*s 和 %.*s 和C++的字符串格式化输出
c语言·c++·c#
逻辑驱动的ken1 小时前
Java高频考点场景题24
java·开发语言·面试·职场和发展·求职招聘
兔小盈1 小时前
多线程-(五)线程安全之内存可见性
java·开发语言·多线程
消失的旧时光-19431 小时前
C语言对象模型系列(四)《Linux 内核里的 container_of 到底是什么黑魔法?》—— 一篇讲透 Linux 内核的“对象模型”核心技巧
linux·c语言·算法
yaoxin5211232 小时前
400. Java 文件操作基础 - 使用 Buffered Stream I/O 读取文本文件
java·开发语言·python
折哥的程序人生 · 物流技术专研2 小时前
《Java面试85题图解版(二)》进阶深化上篇:并发编程 + JVM
java·开发语言·后端·面试
2501_931803752 小时前
Go:一门为解决C语言痛点而生的现代语言
c语言·开发语言·golang