首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个 switch 语句有关问题

2012-03-05 
一个 switch 语句问题#includestdio.h voidmain(){inty0charcdo{switch(cgetchar()){casea :caseb :

一个 switch 语句问题
#include   "stdio.h "
void   main()
{
                  int   y=0;
char   c;

do{
switch(c=getchar())
{
case   'a ':

                  case   'b ':

                  default:{y++;   printf( "y=%d\n ",y);   }

printf( "hello\n ");
}
}while(c!= '0 ');
}


当我输入a回车时,输出结果是:
y=1
hello
y=2
hello

问题:为什么我只输入了一次,但default语句却执行了2次?
我觉得应该输出是:
y=1
hello


[解决办法]
#include "stdio.h "
void main()
{
int y=0;
char c;

do{
switch(c=getchar())
{
case 'a ':

case 'b ':

default:{y++; printf( "y=%d\n ",y); }

printf( "hello\n ");
}
fflush(stdin); /* 清除輸入區緩存,等於把之前的回車清掉,不然到下一個循環後,getch()會自動覺得你輸了個回車,基本就是這樣了。。。。*/
}while(c!= '0 ');
}
[解决办法]
正如楼上几位说的,那个回车也被读入缓冲区了,你可以在default处把它屏闭掉

#include "stdio.h "
void main()
{
int y=0;
char c;

do{
switch(c=getchar())
{
case 'a ':

case 'b ':

default:
{
if(c!= '\n ') //加一个判断,来避免回车键在缓冲区的影响
{
y++; printf( "y=%d\n ",y);
}
}
printf( "hello\n ");
}
}while(c!= '0 ');
}

热点排行