C语言关于while循环的问题

#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()未能够读取指定形式的输入时,它就会留下这个不相容的输入,以供下次进行读取。当我输入字母时它就会保留字母所以会出现无限循环。
这个就是问题的答案,我对百度知道失望了,谢谢下面两位,这个是我找到的答案

第1个回答  2015-08-07
你看你有一行是
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); // 清除输入流

这样就可以继续输入啦
\微笑

第2个回答  2015-08-07
你只有输入一个ASCII码值为1的才会结束循环,你的status!=1这样的条件设置有问题,并且你循环体中和循环体外面的:status=scanf("%ld",&num); 语句有问题,格式输入函数没有返回值吧。本回答被网友采纳
第3个回答  2015-08-07
scanf()函数返回的值为:正确按指定格式输入变量的个数;
因为输入字母时,就没有正确输入指定格式的变量,返回值为0,而0!=1永远成立,所以陷入无限循环追问

如果你这么解释,那么while的条件为status==1时为什么不会陷入无限循环?

追答

0==1不会成立啊,就不会进去循环了。
你将status的值printf出来看一下就清楚了哦。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网