鱼C论坛

 找回密码
 立即注册
查看: 907|回复: 3

[已解决]执行顺序

[复制链接]
发表于 2021-1-13 23:56:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
该程序用来统计每个分数段的人数,但while循环不会停止,求助一下这样写while语句小括号里的内容的执行顺序是啥?(我知道该怎么改,单纯是这里不太清楚)
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int a=0,b=0,c=0;
  5.     int x;
  6.     while(scanf("%d",&x)!=0)
  7.     {
  8.         if(x>85)
  9.         {
  10.             a++;
  11.         }
  12.         else if(x>=60)
  13.         {
  14.             b++;
  15.         }
  16.         else if(x<60)
  17.         {
  18.             c++;
  19.         }
  20.     }
  21.     printf(">=85:%d\n60-84:%d\n<60:%d",a,b,c);
  22.     return 0;
  23. }
复制代码
最佳答案
2021-1-14 00:02:43
while(scanf("%d",&x)!=0)
先执行scanf("%d",&x)进行匹配,读入一个x,
scanf返回匹配成功的变量个数(正确运行时为1)
这时根据scanf的返回值是否为0就可以判断是否进入while循环
过滤掉输入不是整型的情况
(因为scanf是根据格式串"%d"来判断是否匹配成功的)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-14 00:02:43 | 显示全部楼层    本楼为最佳答案   
while(scanf("%d",&x)!=0)
先执行scanf("%d",&x)进行匹配,读入一个x,
scanf返回匹配成功的变量个数(正确运行时为1)
这时根据scanf的返回值是否为0就可以判断是否进入while循环
过滤掉输入不是整型的情况
(因为scanf是根据格式串"%d"来判断是否匹配成功的)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-14 00:26:57 | 显示全部楼层
本帖最后由 jackz007 于 2021-1-14 00:28 编辑
  1.     while(scanf("%d",&x)!=0)
复制代码

        当键盘输入为有效数字的时候 scanf() 返回 1,while 的条件为 true,循环会继续,x 也会相应获取到键盘输入,但是,如果键盘输入为非有效数字(比如字符 'a')时,scanf() 将返回 0 ,循环条件为假,循环就此结束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 会怎样运行,你肯定知道,不说也罢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-8 09:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表