一世轻尘 发表于 2021-1-13 23:56:47

执行顺序

该程序用来统计每个分数段的人数,但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;
}

昨非 发表于 2021-1-14 00:02:43

while(scanf("%d",&x)!=0)
先执行scanf("%d",&x)进行匹配,读入一个x,
scanf返回匹配成功的变量个数(正确运行时为1)
这时根据scanf的返回值是否为0就可以判断是否进入while循环
过滤掉输入不是整型的情况
(因为scanf是根据格式串"%d"来判断是否匹配成功的)

jackz007 发表于 2021-1-14 00:26:57

本帖最后由 jackz007 于 2021-1-14 00:28 编辑

    while(scanf("%d",&x)!=0)
      当键盘输入为有效数字的时候 scanf() 返回 1,while 的条件为 true,循环会继续,x 也会相应获取到键盘输入,但是,如果键盘输入为非有效数字(比如字符 'a')时,scanf() 将返回 0 ,循环条件为假,循环就此结束。

风过无痕1989 发表于 2021-1-14 01:13:40

while(scanf("%d",&x)!=0) 改写成:while((scanf("%d",&x)) != 0 ) ,你便看到更清楚了,(scanf("%d",&x)) 输入正确(%d 输入数字,%c 输入字符, %f、%lf 输入浮点数,%s 输入字符串 . . .),返回值为 1,输入错误,返回值为 0。
这两种情况下,while 会怎样运行,你肯定知道,不说也罢
页: [1]
查看完整版本: 执行顺序