零基础C语言入门016——switch语句

本文介绍了C语言中的switch语句,强调了其在处理多分支结构时的便利性。详细讲解了case标签的使用规则,包括常量匹配、顺序无关性以及default的可选性。同时,提到了break语句的重要性,用于跳出switch结构。还探讨了分支结构的嵌套和if语句的悬挂else问题,提醒程序员注意else总是与最近未匹配的if结合,避免逻辑错误。

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

处理多分支结构,可以考虑使用语法更简便的 switch 语句

…… // 其它语句
switch (表达式)
{
    case 常量表达式1: 语句或程序块
    case 常量表达式2: 语句或程序块
    ……
    case 常量表达式n:语句或程序块
    default: 语句或程序块 
}
…… // 其它语句

这里每个 case 后边的常量是匹配 switch 后边表达式的值
case 后边必须跟一个常量值,而不能是一个范围
case后的常量表达式值不能相同
case后允许有多个语句,可以不用大括号
各case和default句子的先后顺序可以变动,且不会影响程序执行结果
如果所有的 case 均没有匹配的,那么执行 default 的内容
default 是可选的,如果没有 default,并且所有的 case 均不匹配,那么 switch 语句不执行任何动作

使用 break 语句跳出
switch 语句中的 case 和 default 事实上都是“标签”,用来标志一个位置而已。当 switch 跳到某个位置之后,就会一直往下执行,所以我们这里还需要配合一个 break 语句,让代码在适当的位置跳出 switch。
事实上 break 语句在循环中能发挥更大的作用(⊙o⊙)哦!

//用开关实现:输入成绩评级就能输出对应的成绩范围
#include<stdio.h>
int main(void)
{
	char ch;
	printf("请输入学生成绩评级\n");
	scanf("%c", &ch);
	switch (ch)
	{
	case 'A': printf("90分以上\n"); break;/*每行用break中断,表示符合此项条件									 
									       就运行,且不再运行其他项*/
	case 'B': printf("80-90分\n"); break;
	case 'C': printf("70-80分\n"); break;
	case 'D': printf("60-70分\n"); break;
	case 'E': printf("60分以下\n"); break;
	default: printf("格式错误,请输入有效的评级\n");/*如果所有的 case 均没有匹配的,
									                  那么执行 default 的内容*/
	}
	system("pause");
	return 0;
}
//用开关实现:简易计算器
#include<stdio.h>
int main(void)
{
	int a, b;
	char ch;
	printf("请输入计算式\n");
	scanf("%d%c%d", &a, &ch, &b);
	switch (ch)
	{
	case'+':printf("%d+%d=%d\n", a, b, a + b); break;
	case'-':printf("%d-%d=%d\n", a, b, a - b); break;
	case'*':printf("%d*%d=%d\n", a, b, a * b); break;
	case'/':printf("%d/%d=%d\n", a, b, a / b); break;
	default:printf("输入格式错误\n");
	}
	system("pause");
	return 0;
}

分支结构的嵌套
如果在一个 if 语句中包含另一个 if 语句,我们就称之为 if 语句的嵌套,也叫分支结构的嵌套。
在这里插入图片描述

悬挂 else
这个问题虽然已经为人熟知,而且也并非 C 语言所独有。但即使是有多年经验的 C 程序员,也常常在此失误过!
考虑下面的代码片段:

if (x == 0)
    if (y == 0)
        error();
else
    z = x + y;

这段代码中编程者的本意是应该有两种主要情况,x 等于 0 以及 x 不等于 0。对于 x 等于 0 的情形,除非 y 也等于 0(此时调用 error 函数),否则程序不作任何处理;对于 x 不等于 0 的情形,程序将 x 与 y 之和赋值给 z。

然而,这段代码实际上所做的却与编程者的意图相去甚远。

原因在于 C 语言中有这样的规则,else 始终与同一对括号内最近的未匹配的 if 结合。
如果我们按照上面这段程序实际上被执行的逻辑来调整代码缩进,大致是这个样子:

if (x == 0)
    if (y == 0)
        error();
    else
        z = x + y;
        

也就是说,如果 x 不等于 0,程序将不会做任何处理。如果要得到原来的例子中由代码缩进体现的编程者本意的结果,应该这样写:

if (x == 0)
{
    if (y == 0)
    {
        error();
    }
}
else
{
    z = x + y;
}

现在,else 与第一个 if 结合,即使它离第二个 if 更近也是如此,因为此时第二个 if 已经被括号“封装”起来了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值