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 共⽤⼀组执⾏语句提供了条件。

相关推荐
菠菠萝宝1 小时前
【Java手搓RAGFlow】-3- 用户认证与权限管理
java·开发语言·人工智能·llm·openai·qwen·rag
csdn_wuwt3 小时前
前后端中Dto是什么意思?
开发语言·网络·后端·安全·前端框架·开发
print(未来)3 小时前
C++ 与 C# 的性能比较:选择合适的语言进行高效开发
java·开发语言
四问四不知3 小时前
Rust语言入门
开发语言·rust
JosieBook3 小时前
【Rust】 基于Rust 从零构建一个本地 RSS 阅读器
开发语言·后端·rust
云边有个稻草人3 小时前
部分移动(Partial Move)的使用场景:Rust 所有权拆分的精细化实践
开发语言·算法·rust
一晌小贪欢3 小时前
Pandas操作Excel使用手册大全:从基础到精通
开发语言·python·自动化·excel·pandas·办公自动化·python办公
松涛和鸣4 小时前
11.C 语言学习:递归、宏定义、预处理、汉诺塔、Fibonacci 等
linux·c语言·开发语言·学习·算法·排序算法
IT痴者5 小时前
《PerfettoSQL 的通用查询模板》---Android-trace
android·开发语言·python
2501_941111246 小时前
C++与自动驾驶系统
开发语言·c++·算法