请帮忙分析一个C程序
#include<stdio.h>
main()
{
char c;
while((c=getchar())!='\n')
switch(c-'0')
{
case 0:
case 1:putchar(c+2) ;
case 2:putchar(c+3);
case 3:putchar(c+4);
default:putchar(c+1);break;
}
printf("\n");
}
从键盘输入420,结果为***********
请问switch(c-'0')如何理解? 以前没有用过
谢谢!
参考答案:你输入420,等于你给这个程序顺次传进了三个char型字符4,2,0。
你试验一下,对于这个程序:
单独输入4,得到5
(这个好理解,因为'4'-'0'=4,程序进入default所以输出4+'1'='5')
单独输入2,得到563
因为:'2-0'=2,程序执行"case2以后的所有语句"。
case 2:putchar(c+3); ('2'+'3'='5')
case 3:putchar(c+4); ('2'+'4'='6')
default:putchar(c+1);break;('2'+'1'='3')
单独输入0,得到2341
因为:'0'-'0'=0。所以执行"case0以及其以后的所有语句"。
case 1:putchar(c+2) ;('0'+'2'='2')
case 2:putchar(c+3); ('0'+'3'='3')
case 3:putchar(c+4); ('0'+'4'='4')
default:putchar(c+1);break;('0'+'1'='1')
合起来就是***********。
学switch语句的时候,一定要搞清楚break的用法,这个程序莫名其妙。因为判断了switch后的变量值后没有在每个case后加上break,导致会执行符合判断的case后面的所有语句(包括default)。
另外default后面加break是画蛇添足,加不加效果都是一样的。