C语言关于while循环的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()未能够读取指定形式的输入时,它就会留下这个不相容的输入,以供下次进行读取。当我输入字母时它就会保留字母所以会出现无限循环。
这个就是问题的答案,我对百度知道失望了,谢谢下面两位,这个是我找到的答案
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出来看一下就清楚了哦。
C语言循环问题
对下面这一段看不太懂,求解释
int sum=1000;
while(sum)
switch(sign)
case 'a':
case 'A':arrive(&st1,&p,a);break;
case 'b':
case 'B':leave(&st1,&st2,&p,a);break;
case 'c':
case 'C':exit(OVERFLOW);break;
printf("\n请输入A/B/C 和 车牌号:");
scanf("%c %d",&sign,&a.car_num);
getchar();
sum--;
switch(sign)
提示你输入选择的字母和车牌号:
printf("\n请输入A/B/C 和 车牌号:");
scanf("%c %d",&sign,&a.car_num);
根据你输入的内容,做出相应的处理反应:
switch(sign)
case 'a':
case 'A':arrive(&st1,&p,a);break;
case 'b':
case 'B':leave(&st1,&st2,&p,a);break;
case 'c':
case 'C':exit(OVERFLOW);break;
参考技术B 嵌套循环
外层循环是:
while(sum)
sum--;
直到sum=0为止,跳出循环
内层循环:
switch(sign)
......
当scanf("%c %d",&sign,&a.car_num); //输入内容
getchar(); //获取输入的字符
输入的sign值为a或A时,执行arrive(&st1,&p,a);break; 这两句语句
输入的sign值为b或B时,执行leave(&st1,&st2,&p,a);break; 这两句语句
输入的sign值为c或C时,执行exit(OVERFLOW);break; 这两句语句本回答被提问者采纳 参考技术C 应该是个汽车监控系统吧,输入a,车牌号1代表车牌号1的车来了,输入b,车牌号2代表车牌号2的车走了,输入c,车牌号表示超载了,就是堵车了.记录1000次 参考技术D 对循环部分可以抽出来
int sum = 1000;
while(sum)
sum--;
意思就是sum是循环次数,每次循环减一,直到sum为0 为止
一共循环了1000次 第5个回答 2013-06-27 这上一人循环嵌套语句,
以上是关于C语言关于while循环的问题的主要内容,如果未能解决你的问题,请参考以下文章