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