#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;
}
}
printf("\n");
}
以上是程序,c=getchar()每次只读取一个字符吗?'2‘是为什么不是代表ASCII代码值中的050呢?关键是switch(c-'2')这里不懂,输入“2473Enter键”,结果是668977,'2‘是当做2来运算的,不是与ASCII代码值中的050相对应,怎么回事?
'2‘是为什么不是代表ASCII代码值中的050呢?为什么不是与ASCII对应?怎么这样运算?
追答'2'是代表50,’2‘的ascii值就是50呀,怎么没有对应?
追问那就不对了啊,输入“2473Enter键”,程序结果是668977,就是按你说的“(c-'2‘)的意思是,当你在键盘录入 5, (c-'2') = 3, 当录入 9, (c-’2‘)=7”这样运算的,它是先读一个“2”,c=2,switch后是0,case0,再case,1,再case2,结果是66。后面4对应8,7对9,3对77,结果就是668977了,没有把'2'当做050来运算那,纠结了
追答程序执行的很正确
当你录入2时,switch(c-'2') 执行 case 0(case 1):和case 2:因为case 2才有break, 所以会输出两个c+4, 也就是两个2+4,结果是 66
当录入4时,switch(c-'2') 执行 case 2:输出一个c+4, 也就是4+4,结果是 8
当录入7时,switch(c-'2') 执行 default:输出一个c+2, 也就是7+2,结果是 9
当录入3时,switch(c-'2') 执行case 1 和 case 2:出两个个c+4, 也就是两个3+4,结果是 77
所以最终的结果是 668977
c=getchar()每次只读取一个字符吗?'2‘是为什么不是代表ASCII代码值中的050呢?关键是switch(c-'2')这里不懂