多层嵌套if-else语句逻辑存问题?C语言switch语句来救场

网安智编 厦门萤点网络科技 2025-08-04 00:02 94 0
多层嵌套的 if-else 语句在语法上是正确的,但逻辑上却没有正确地表达程序员的意图,例如,意料之外的 else-if 更可能不会注意到而被溜过去;C语言还提供了另一种用于多分支选择的语句,作为一种在一组互斥的项目中做选择的替代方法,根据...

多层嵌套的 if-else 语句在语法上是正确的,但逻辑上却没有正确地表达程序员的意图,例如,意料之外的 else-if 更可能不会注意到而被溜过去;C语言还提供了另一种用于多分支选择的语句,作为一种在一组互斥的项目中做选择的替代方法,根据变量的不同取值来执行不同的代码块。其一般形式为:

(表达式){

case 表达式1: 语句1;

case 表达式2: 语句2;

case 表达式n: 语句n;

: 语句n+1;

计算表达式的值,然后逐个与case后的表达式值进行比较,当case后的表达式的值与表达式的值相等时, 即执行对应case后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行后的语句。

int main(void){

int a;

scanf("%d",&a);

(a){

case 1:("\n");

case 2:("\n");

case 3:("\n");

case 4:("\n");

:("error\n");

0;

如果我们输入1,case 1:后面的语句开始执行,但是程序并没有再执行这条语句后停止,而是继续执行下面的case语句,包括,直到程序结束。这是因为我们必须显式地告诉编译器停止执行中的语句,这可以通过在语句内的每个执行单元后指定一个break语句来完成 在大多数条件下一个 case标签的最后一条语句是break。当遇到 break 语句语句被终止。正确的代码如下:

int main(void){

int a;

scanf("%d",&a);

(a){

case 1:("\n"); break;

case 2:("\n"); break;

case 3:("\n"); break;

case 4:("\n"); break;

:("error\n");

0;

C语言switch语句使用技巧_多层嵌套if-else语句优化_c语言switch

那么程序员什么时候希望省略 break 语句?如果多个 case 语句都执行相同的功能代码时,允许程序执行多个 case 标签!例如输入学生成绩,大于90分为优,大于70分为一般,大于60分为良,小于60分为差,可用以下代码实现:

int main(void){

int score;

scanf("%d",&score);

(score/10){

case 10:

case 9: ("优\n"); break;

case 8:

case 7: ("一般\n"); break;

case 6:("良\n"); break;

:("差\n");

0;

把case标签一个接一个堆起来,以强调这种情形代表的是一个要被匹配的范围,例如和case9为一组,超市score/10等于10或者9,即90分以上的条件。

总结: