关于解决输入整形变量时输入字符型造成死循环

需求 当我们用scanf()输入整形数字时,往往会遇到输入字符造成死循环的情况,现在我们来解决这个问题。 这问题是我在学校的实践课中遇到的问题,然后在网上找

需求

当我们用scanf()输入整形数字时,往往会遇到输入字符造成死循环的情况,现在我们来解决这个问题。

这问题是我在学校的实践课中遇到的问题,然后在网上找了一些资料。

分析

当我们输入整形数据时,整形变量就会接收,但是当我们输入字符型时,scanf()不会接收字符并且跳过,这时字符并不会自己消失掉,它会一直存储在缓存区中,然后scanf()一直读取一直跳过,从而造成死循环

例如
while(scanf("%d",&n)!=EOF)
{if(n==1)printf("%d",n);else printf("输入错误");  
}

输入常规整形时
在这里插入图片描述

当我们输入字符型时,会造成死循环

请添加图片描述

解决方法
//这时我们可以用一个字符数组来接收这种问题#include"stdio.h"
#include"stdlib.h"
#include
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");}
}

这时我们就可以解决这个问题请添加图片描述