#include<stdio.h>
int main(void)
{
long num;
long sum=0L;
int status;
printf("Please enter an integer to be summed.");
printf("(q to quit!)");
status=scanf("%ld",&num);
while(status!=1)
{
sum=sum+num;
printf("Please enter next integer(q to quit):");
status=scanf("%ld",&num);
}
printf("Those integer sum to %ld.\n",sum);
return 0;
}
我想问的是:
while的判断条件为status!=1时,为什么输入字母如 a,q,w,t时会陷入无限循环?
当scanf()未能够读取指定形式的输入时,它就会留下这个不相容的输入,以供下次进行读取。当我输入字母时它就会保留字母所以会出现无限循环。
这个就是问题的答案,我对百度知道失望了,谢谢下面两位,这个是我找到的答案
long num;
这行说的是num是一个长整形变量。
然后你用scanf赋值,你赋的'a','b'这样的字符。
这导致scanf函数的输入错误。返回0
0有付给啦status。0!=1当然是正确的所以继续循环。
\微笑追问
我已经在上面发过答案了
我大概知道是怎么回事了
另外我也知道肯定输入字母如a,b是错误的,scanf()会返回0
然后在while里面循环
但是无限循环的根本原因是scanf在错误输入后会保留原输入字符
所以字母会继续进入循环导致无限循环,就酱
我懂你的意思,你看第一个输入,你输入的status=scanf("%ld",&num);
这时候
我懂你的意思,你看第一个输入,你输入的status=scanf("%ld",&num);
这时候你输入的是a,那么你也知道错啦,这时候系统默认你已经输出啦,在输入流中,后面继续进行,又到啦循环里的status=scanf("%ld",&num);这时候系统从输入流中调入你输入的a,还是错的,呢么每次都循环,每次都错。所以无限循环,你可以在scanf后面加一个
fflush(stdin); // 清除输入流
这样就可以继续输入啦
\微笑
因为输入字母时,就没有正确输入指定格式的变量,返回值为0,而0!=1永远成立,所以陷入无限循环追问
如果你这么解释,那么while的条件为status==1时为什么不会陷入无限循环?
追答0==1不会成立啊,就不会进去循环了。
你将status的值printf出来看一下就清楚了哦。