若运行以下程序时,从键盘输入2473↙(↙表示回车),则下面的程序的运行结果是

问题描述:

若运行以下程序时,从键盘输入2473↙(↙表示回车),则下面的程序的运行结果是
#include
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;
}
}

结果是668977
第一个字符是'2' 变量c接受一个字符2,但是由于用的是getchar()函数,因此虽然定义c为int型,此时c中仍然存放的是字符'2',而不是数字2,也就是ASLL码50,此时c!='\n',于是进入switch语句,条件是c-'2',由于c='2',条件也就相当于'2'-'2',因此结果为0,进入case 0,但是case 0 后面没有语句,也没有break,于是继续执行case1 后面的语句puchar(c+4) ,此时c的ASLL码是'2'也就是50,加上4以后就是字符'6'的ASCLL码54,因此屏幕输出一个6,但是case 1后面也没有break语句,因此继续执行case 2后面的语句,putchar(c+4)仍然是输出一个6,此时遇到了break语句,跳出循环,继续输入字符.
第二个字符是'4' ..用同样的道理分析一下 后面的都相同