有以下程序:
#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");
}
若输入数据2473.得到的结果是668977.为什么呢?怎么算的?
第一次输入2 case 0 但没有break,所以继续做下面的,输出2+4,同理没有break输出2+4,
第二次输入4,case 2 输出4+4,break跳出
第三次输入7,7-2=5,default 输出7+2,break跳出
第四次输入3,case 1,输出3+4,没有break,继续做下面的输出3+4,break
所以结果是668977
你的答案668977是六个字符,'6'ASCII码为54,'2'ASCII码为50,c语言中有个自动类型转换,int c=50与char c='2'是通用的,在(c=getchar())!='\n'中将c作为一个字符,但你定义的是int型所以c存储的是50,若定义成char型则c中存储'2',相减时自动将字符的ASCII码相减。在switch中c作为整数来进行判断。另外每句case后加break是一定要记住的,除非你一定要给几个case加同一个命令。