需求
当我们用scanf()输入整形数字时,往往会遇到输入字符造成死循环的情况,现在我们来解决这个问题。
这问题是我在学校的实践课中遇到的问题,然后在网上找了一些资料。
分析
当我们输入整形数据时,整形变量就会接收,但是当我们输入字符型时,scanf()不会接收字符并且跳过,这时字符并不会自己消失掉,它会一直存储在缓存区中,然后scanf()一直读取一直跳过,从而造成死循环
例如
while(scanf("%d",&n)!=EOF)
{
if(n==1)
printf("%d",n);
else
printf("输入错误");
}
输入常规整形时
当我们输入字符型时,会造成死循环
解决方法
//这时我们可以用一个字符数组来接收这种问题
#include"stdio.h"
#include"stdlib.h"
#include<string.h>
int main()
{
int n,m,i,j;
char x,s[20];
while(scanf("%s",s)!=EOF)
{
if(strlen(s)!=1)
{
printf("输入错误,请重新输入\n");
continue;
}
m=s[0]-'0';
if(m==1) printf("%d\n",n);
else
printf("输入错误,请重新输入\n");
}
}
这时我们就可以解决这个问题