c基础问题,求大虾指点
#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);
case 4:putchar(c+3);break;
}}
printf("\n");
}输入2743得到66877为什么?
[解决办法]
输入2的时候,case 1和case 2响应输出两个6
输入7的时候,什么都不输出
输入4的时候,case 2响应输出一个8
输入3的时候,case 1和case 2响应输出两个7
[解决办法]
道理很简单, 首先根据你的程序,你的c 一次从标准流中得到一个字符。 然后遇到换行符号,终止循环。
在循环内部有一个switch case 语句,来检查输入,以输出相应的结果。
好,这里根据你给出的输入数据: 2 7 4 3。我们来分析
step1: 输入2时, switch(c - '2') 得到 0 , 来到case 0:处, 由于没有break,所以继续向下,来到case1处,输出putchar(c + 4)得到字符'6', 输出 6, 由于又没有break语句,所以继续向下,再一次执行putchar(c + 4) 输出字符'6',由于这一次有break语句,所以跳出switch语句块。继续下一次循环。
step2: 输入7时, switch(c - '2') 得到 5, 没有case 可以匹配。 所以switch语句结束。 继续下一次循环。
step3: 输入4时, switch(c - '2') 得到 2, 于是跳到 case 2处。 执行putchar(c + '4')得到字符'8',输出。 然后遇到break. 跳出switch语句块。 继续下一次循环。
step4: 输入3时, switch(c - '2') 得到 1, 于是跳到 case 1处。 同step1处的分析相同。 结果输出2个字符'7'。
最后,遇到换行符号, 退出循环, 输出一个换行,程序结束。
[解决办法]
记住在满足case条件之后,如果没有break,程序会往下接着执行
[解决办法]
楼主 switch()都没弄懂吗?
break 就像一扇门,有break,程序就能出去(出switch),否则继续执行下面的即使case不匹配也要执行!
[解决办法]
[解决办法]
要养成良好代码书写的习惯