C语言关于switch语句的问题

[复制链接]
查看11 | 回复5 | 2011-7-3 15:58:50 | 显示全部楼层 |阅读模式
#include
void main()
{int a=0,i;
for(i=1;i<5;i++)
{
switch(i)
{case 0:
case 3:a+=2;
case 1:
case 2:a+=3;
default:a+=5;}
}
printf("%d",a);
}
这个最后结果是31,经过分析是switch语句在case后面没有表达式和break的时候把表达式当成空语句了,可是不是应该是同下一个最近的case表达式相同么,怎么成空语句了,难道是switch的特殊规则?
请把每一步怎么加上来的也写下来,谢谢
你们的意思是把case 1:给忽略了?
(case 1:
case 2:a+=3;)这个应该和这个是一样的意思啊
(case 1:a+=3;
case 2:a+=3;),不是么?

回复

使用道具 举报

千问 | 2011-7-3 15:58:50 | 显示全部楼层
switch语句的规则是首先找到一个匹配项,在此匹配项之下开始运行,直到遇到一个break则返回,比如对于i=1,首先找到case 1:,然后没有看到break,继续执行case 2:的语句,a+3,然后还是发现没break,又执行default,使得a=8了,其他的i值以此类推会得到31这个结果 他没有忽略case 1:这个语句,只是这个只是一个标记,用来判断i值是否为1,当i=1的时候就会执行case 1:后面的语句,但是发现case 1:这个语句后面没有可执行的语句,也没有break,因此他继续执行case 2:下面的语句,直到遇见一个break或者这个域结束 另外:case 1:case 2: a+=3;与cas...
回复

使用道具 举报

千问 | 2011-7-3 15:58:50 | 显示全部楼层
//i=1,执行a+=3,a=3,因为没有break,继续执行default语句a+=5,a=8//i=2,执行a+=3,a=11,因为没有break,继续执行default语句a+=5,a=16//i=3,执行a+=2,a=18,因为没有break,继续执行a+=3,a=21,继续执行default语句a+=5,a=26//i=4,执行defa...
回复

使用道具 举报

千问 | 2011-7-3 15:58:50 | 显示全部楼层
循环执行4 次,分别是i=1,2,3,4时执行。当i=1时,执行a+=3,a+=5,结果a=8。当i=2时,执行a+=3,a+=5,结果a=16。当i=3时,执行a+=2,a+=3,a+=5,结果a=26。当i=4时,执行a+=5,结果a=31。...
回复

使用道具 举报

千问 | 2011-7-3 15:58:50 | 显示全部楼层
switch的机制:判断变量是符合哪个case,如果符合某一个case,那么从那个case处执行。因此如果没有break语句,下面的case依然会按顺序执行,switch只负责跳到哪儿,该怎么执行还是怎么执行。题目当中的case 1没有break,因此case2依然会执行。另外,虚机团上产品团购,超级便宜...
回复

使用道具 举报

千问 | 2011-7-3 15:58:50 | 显示全部楼层
类型不一样,两种用法都对,第一种要求switch是一个整型变量,而第二中是一个char型,加不加括号没什么区别...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行