c语言 switch语句问题

[复制链接]
查看11 | 回复3 | 2009-6-29 03:23:35 | 显示全部楼层 |阅读模式
输入134,
#include
void main()
{int c;
while((c=getchar())!='\n')
{switch(c-'1')
{case 0:
case 1:putchar(c+4);
case 2:putchar(c+3);break;
case 3:putchar(c+2);
case 4:putchar(c+1);break;

}
}
printf("\n");
}
结果为什么是54665啊?

回复

使用道具 举报

千问 | 2009-6-29 03:23:35 | 显示全部楼层
while那个循环使得c每次得到其中一位数字.输入134,第一次循环得到的是1. 之后下面的switch的结果是 c-1,也就是0,但是这个运算不改变c的值,只影响后面的case. 所以1是先运行case 0,因为case 0 没有break,所以继续下一个case 1,就是输出c+4,也就是输出5,因为case 1也没有break,所以执行下一个case 2,输出1+3=4. 所以得到54.第二次循环,得到的结果是3,经过switch后得到的是2. 执行case 2,输出3+3也就是6,case 2有break,结束. 最后一次循环是4,执行case 3, 输出4+2=6,case 3没有break,继续case 4,输出4+1=5. 循环结束...
回复

使用道具 举报

千问 | 2009-6-29 03:23:35 | 显示全部楼层
我帮你改了下,你看看getchar()是输入的字符#includevoid main(){int c;while((c=(int)getchar())!='\n')switch(c-'1')/*'1'可以换为1的ASCII码49*/{
case 0:
case 1:putcha...
回复

使用道具 举报

千问 | 2009-6-29 03:23:35 | 显示全部楼层
完全同意inonomori的解答,我认为一般初学者易出错的地方在这两点,一是CASE匹配进入后,初学者会认为执行完就退出。结果不然,C语言是CASE进入后就不再判断,一直运行到SWITCH结束,若非要退出SWITCH,就用BREAK退出SWITCH语言。二是初学者容易觉得switch(c-'1')这一句让C的值也减掉1.其实这里只是一个表达示...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行