学习笔记_关于switch在whlie中无限循环的解决办法_C语言
今天在做作业的时候突然发现一个问题
#include<stdio.h>
int main()
{
int a;
while(1)
{
printf("请输入:");
scanf("%d",&a);
switch(a)
{
case 1:printf("你输入了1 \n\n");break;
case 2:printf("你输入了2 \n\n");break;
default:printf("输入有误! \n\n");break;
}
}
return 0;
}
上面这段代码,应该除了输入1或者2,输入其他的都会输出“输入错误”,但是,如果不小心输入了字母或符号,程序就会进入无限循环,也就是说只能输入数字。
上网查了后发现,scanf函数是从缓冲区接受数值,而当我们输入字母或其他时,字符就一直留在缓冲区,再次循环,scanf再从缓冲区获取时还是字母,就相当跳过了scanf这一句,从而造成死循环。
经过测试后发现,只要把接受输入的变量定义在while循环里面,并给该变量赋值,在scanf之前清空缓冲区,这样程序就可以正常运行了。
#include<stdio.h>
int main()
{
while(1)
{
int a = -1;
fflush(stdin); //清理缓冲区
printf("请输入:");
scanf("%d",&a);
switch(a)
{
case 1:printf("你输入了1 \n\n");break;
case 2:printf("你输入了2 \n\n");break;
default:printf("输入有误! \n\n");break;
}
}
return 0;
}
该文章仅为小白在学习上的个人见解,如果有错误,或者大神有更好的办法,还望不啬赐教。