读书人

一个 switch 语句有关问题

发布时间: 2012-03-05 11:54:01 作者: rapoo

一个 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 ');
}

读书人网 >C语言

热点推荐