有关C语言的问题:下边程序如果输入时不小心输入一个字母,会不会造成死循环或其他问题,请解释一下为什么

2025-12-15 12:06:21
推荐回答(4个)
回答1:

会出现死循环,
因为第一点: scanf从缓冲区获取数值
第二点: scanf 成功获取i值后返回成功赋值的变量数值, 发生错误时返回EOF
原理 当你不小心输入字符后,scanf返回的是EOF,即i=1没有发生改变,并且缓冲区的数值一直没有得到释放,while循环里的scanf就会一直获取缓冲区的值,而不再通过屏幕获取用户输入的值..那么while就会一直执行,即死循环
处理办法 在scanf后加上fflush(stdin);或者其他的办法把缓冲区的数值清除或用别的变量吃掉缓冲区的值 希望对你有所帮助,谢谢采纳

回答2:

#include
char result(int x)
{
char s;
if(x>=90)
{
s='A';
}
else
{
if(x>=80)
{
s='B';
}
else
{
if(x>=70)
{
s='C';
}
else
{
if(x>=60)
{
s='D';
}
else
{
s='E';
}
}
}
}
return(s);
}
void myresult(int x)
{
char s;
if(x>0&&x<=100)
{
s=result(x);
printf("%c\n",s);
}
else
{
printf("error.\n",s);
}
}
int main()
{
int i=1 ;
while(i!=0)
{
scanf("%d",&i);
fflush(stdin);
myresult(i);
}
}

回答3:

#include
char result(int x)
{
char s;
if(x>=90)
{
s='A';
}
else
{
if(x>=80)
{
s='B';
}
else
{
if(x>=70)
{
s='C';
}
else
{
if(x>=60)
{
s='D';
}
else
{
s='E';
}
}
}
}
return(s);
}
void myresult(/*char */x) /*对输入的字符型数据做判断 字符的ASCLL值也在0~100之间哦,
{
char s;
if(/* x>'0'&&x<='100' */)
{
s=result(x);
printf("%c\n",s);
}
else
{
printf("error.\n");
}
}
int main()
{
int i=1 ;
/* if*/ (i!=0) /*避免死循环 */
{
scanf("%d",&i);
myresult(i);
}
}

回答4:

自己测试一下呗