楼主,很抱歉,我用VC++6.0调试你给出的程序后,输入2743,但没有得到你所说的66877,而是66:88(中间是冒号)。
但我依然可以为你解答输出的原因。
我们慢慢来看这个程序的执行过程:
1、输入2743;
2、执行getchar(),将第一个字符'2'赋值给int
整型的c,c='2';
3、判断c!='\n',语句为真,执行while循环体;
4、执行swithch()多重判断:
判断的内容是c-'2'。此时c='2',在这儿就是判断的'2'-'2',也就是0;
5、从case 0语句后开始执行,case 0后无语句,直接向下执行;
6、执行case 2处的语句,输出c+4的ASCII码对应的字符,即输出'2'+4对应的字符,就是'6',继续向下执行;
7、执行case 3处的语句,再次输出'6';
8、遇见break语句,跳出switch;
9、回到getchar(),将第二个字符'7'赋值给int整型的c,c='7';
10、判断c!='\n',语句为真,执行while循环体;
11、执行swithch()多重判断:
判断的内容是c-'2'。此时c='7',在这儿就是判断的'7'-'2',也就是5;
12、从case 5语句后开始执行,输出c+3的ASCII码对应的字符,即输出'7'+4对应的字符,就是':'(冒号);
13、遇到break语句,跳出switch;
14、获得4的步骤类似2,在此不再赘述,最后输出的是两个8;
15、最后获得3,在进行switch判断的时候,由于没有case 1与其对应,所以直接跳出switch,不执行任何语句;
所以输出的是66:88(中间是冒号),不是楼主所说的66877;
如果对switch语句熟悉的话,这个过程想起来很简单,没有我这里说得这么繁琐;
同时,这里还涉及到整型和字符型之间的计算,如果楼主静的下心来看的话,其实里面却是还是有点绕的。
恩恩,就说这么多吧~~~