执行顺序
该程序用来统计每个分数段的人数,但while循环不会停止,求助一下这样写while语句小括号里的内容的执行顺序是啥?(我知道该怎么改,单纯是这里不太清楚)#include<stdio.h>
int main()
{
int a=0,b=0,c=0;
int x;
while(scanf("%d",&x)!=0)
{
if(x>85)
{
a++;
}
else if(x>=60)
{
b++;
}
else if(x<60)
{
c++;
}
}
printf(">=85:%d\n60-84:%d\n<60:%d",a,b,c);
return 0;
} while(scanf("%d",&x)!=0)
先执行scanf("%d",&x)进行匹配,读入一个x,
scanf返回匹配成功的变量个数(正确运行时为1)
这时根据scanf的返回值是否为0就可以判断是否进入while循环
过滤掉输入不是整型的情况
(因为scanf是根据格式串"%d"来判断是否匹配成功的) 本帖最后由 jackz007 于 2021-1-14 00:28 编辑
while(scanf("%d",&x)!=0)
当键盘输入为有效数字的时候 scanf() 返回 1,while 的条件为 true,循环会继续,x 也会相应获取到键盘输入,但是,如果键盘输入为非有效数字(比如字符 'a')时,scanf() 将返回 0 ,循环条件为假,循环就此结束。 while(scanf("%d",&x)!=0) 改写成:while((scanf("%d",&x)) != 0 ) ,你便看到更清楚了,(scanf("%d",&x)) 输入正确(%d 输入数字,%c 输入字符, %f、%lf 输入浮点数,%s 输入字符串 . . .),返回值为 1,输入错误,返回值为 0。
这两种情况下,while 会怎样运行,你肯定知道,不说也罢
页:
[1]