有个C语言的问题,switch语句中switch(c-'2')和switch(c-2),c为输入的数,这两个有什么区别?测试的答案不

有个C语言的问题,switch语句中switch(c-'2')和switch(c-2),c为输入的数,这两个有什么区别?测试的答案不同。。。#include<stdio.... 有个C语言的问题,switch语句中switch(c-'2')和switch(c-2),c为输入的数,这两个有什么区别?测试的答案不同。。。
#include <stdio.h>
main()
{
int c;
while((c=getchar())!='\n')
{
switch(c-'2')
{
case 0:
case 1:putchar(c+4);
case 2:putchar(c+4);break;
case 3:putchar(c+3);
default:putchar(c+2);break;
}
}
}
如果加上那两个‘输入数字2时答案为66,如果没有两个’答案为4......
展开
 我来答
寻平阳
2011-02-27 · TA获得超过1525个赞
知道小有建树答主
回答量:1235
采纳率:0%
帮助的人:1060万
展开全部
不带'',表示整数2,如果带'',则是字符'2'==0x32==50(参考ascii表)
而输入2时,getchar()得到的c值是字符'2',所以,
c-'2'==0
c-2==0x30==48

如果switch(c-'2'),则c-'2'==0,
所以case 0:成立,因为其后没有break,
顺序执行case1:c+4=='6',输出6
顺序执行case2:c+4=='6',输出6,然后break结束
如果switch(c-2),则c-2==0x30==48,
所以default:成立,c+2=='4',输出4,然后break结束
追问
谢谢~
simon_1712
2011-02-27 · 超过13用户采纳过TA的回答
知道答主
回答量:52
采纳率:0%
帮助的人:42.1万
展开全部
c-'2',也就是减去2的ASCII,即32H=50,
c-2,也就是减去2,
加上了单引号,就表示为字符,要用ASCII表示它的值!!!

当有引号时,c-'2'的结果就是0,会执行case 0, case 1, case2语句,所以会执行了两将putchar(c+4),而c+4就是'2'+4='6',输入6,所以为66。
当没有引号时,c-2的结果就是48,会执行default语句,putchar(c+2)而c+2='2'+2='4',输出4。
追问
谢谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式