当前位置: 代码迷 >> C语言 >> [求助]switch的问题
  详细解决方案

[求助]switch的问题

热度:479   发布时间:2007-03-22 19:43:18.0
[求助]switch的问题
22.有以下程序  正确答案为C
main(){
  char k; int I;
  for(i=1;i<3;i++){
    scanf("%c",&k);
    switch(k){
      case '0': printf("another\n");
      case '1': printf("number\n");
    }
  }
}
程序运行时,从键盘输入:01<回车>,程序执行后的输出结果是
A) another number
B) another number
C) another number another
D) number number number


为什么?
我自己照他的样子编了下是another number number
搜索更多相关的解决方案: switch  

----------------解决方案--------------------------------------------------------
case后没有break就把后面的全执行了
----------------解决方案--------------------------------------------------------
一步一步看执行顺序就可以知道了.
没有break;会一直往下执行,直到switch()的最后.
LZ可以试一下.
----------------解决方案--------------------------------------------------------

输入01,由于字符只能接受一个字符,所以此时K为0,由于K=0,而1却储存在缓存之中,所以执行printf("another\n");
又由于没有BREAK,所以继续执行下去而不去判断,所以会继续执行printf("number\n");第一次循环结束,开始第二次循环,
执行scanf("%c",&k);但由于缓存之中还有字符,系统就不会出现提示输入的界面,而直接将缓存中的1传给K,此时K=1;所以执行printf("number\n");最后的结果就是another number number,答案错了

自已去把3改大点,让其循环次数多点,输入多个字符(0101)运行下面这个.
#include <stdio.h>

void main()
{
int i;
char k;
for(i=0;i<5;i++)
{
scanf("%c",&k);
switch(k)
{
case '0':printf("another\t");
case '1':printf("number");
}
printf("\n");
}
printf("aaaa\n");
}

结果只会输出四行,而循环有五次,为什么会这样呢? 原因在此,缓存中还有一个回车符,在第五次循环是将回车符传给K,SWITCH语句中没有语句被执行,但printf("\n");是被执行了的,运行之后,输出的AAAA的前面有一行空着


----------------解决方案--------------------------------------------------------

谢谢,楼上的..分析的这么透彻~~~


----------------解决方案--------------------------------------------------------

main()
{
  char k;
int i;
  for(i=1;i<3;i++)
{
    scanf("%c",&k);
    switch(k)
{
      case '0': printf("another\n");
      case '1': printf("number\n");
    }
  }
}

我编译时出错,停留在char k;行
  


----------------解决方案--------------------------------------------------------
楼上的错误,有谁知道呀?
我咋不知道了,郁闷!
----------------解决方案--------------------------------------------------------
以下是引用pinglideyu在2007-3-23 20:19:13的发言:
楼上的错误,有谁知道呀?
我咋不知道了,郁闷!

头文件也有了,#include <stdio.h>,但就是没有找到问题的所在
----------------解决方案--------------------------------------------------------
真郁闷,不知道哪儿错了!!!
错得比较奇怪啊!!!
----------------解决方案--------------------------------------------------------

以下是引用liel在2007-3-23 20:41:17的发言:
真郁闷,不知道哪儿错了!!!
错得比较奇怪啊!!!

你们的编译也没有通过?


----------------解决方案--------------------------------------------------------
  相关解决方案