| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 12828 人关注过本帖
标题:不满足while循环条件时,为什么还会执行while语句?
只看楼主 加入收藏
勿乱
Rank: 2
等 级:论坛游民
帖 子:21
专家分:58
注 册:2017-2-7
结帖率:100%
收藏
 问题点数:0 回复次数:11 
不满足while循环条件时,为什么还会执行while语句?
下面是一个百分制成绩转换成等级问题,输入80,预想的结果应当是输出"B"才对呀,80不满足小于0大于100,应该会跳过while语句,执行if语句呀,为什么不满足while条件还会执行while语句?
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-02-07 17:57
daienkai
Rank: 1
等 级:新手上路
帖 子:30
专家分:7
注 册:2017-1-31
收藏
得分:0 
你把输入 和  输出 放在white上面就对了
2017-02-07 18:11
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:0 
逻辑错误。
先执行while语句,后扫描输入的数据。这时while的判定条件——score的值是初始值,因为你没有初始化,可能系统默认初始化为0了。
2017-02-07 18:15
勿乱
Rank: 2
等 级:论坛游民
帖 子:21
专家分:58
注 册:2017-2-7
收藏
得分:0 
回复 3楼 zbjzbj
非常感谢
2017-02-07 18:33
cuichengde19
Rank: 1
等 级:新手上路
帖 子:22
专家分:3
注 册:2017-2-6
收藏
得分:0 
这个用嵌套if是不是更好理解一点? 还是while比较省时?
2017-02-07 20:00
勿乱
Rank: 2
等 级:论坛游民
帖 子:21
专家分:58
注 册:2017-2-7
收藏
得分:0 
回复 5楼 cuichengde19
其实我是想实现当 输入的数值不满足1到100时输出 error,然后提示继续输入数据,循环下去直到输入正确,而不是输入错误数据就直接终止程序。
2017-02-07 20:10
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
那样啊~可以按照程序流程一步一步解读~就知道执行scanf后就会跟着执行printf("input error\n");了,while框架要改改~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-07 20:17
勿乱
Rank: 2
等 级:论坛游民
帖 子:21
专家分:58
注 册:2017-2-7
收藏
得分:0 
回复 7楼 九转星河
我改成了这样,没问题了,但我觉得程序有点冗杂,用了两个输入语句
 #include<stdio.h>
   int main()
   {
       int score;
       char grade;
       printf("Please input score:");
       scanf("%d", &score);
       while(score < 0 || score > 100)
       {
             printf("Input error!\n");
             printf("Please input score:");
             scanf("%d", &score);
       }
        if (score >= 90)
             grade = 'A';
        else if (score >= 80)
             grade = 'B';   
        else if (score >= 70)
             grade = 'C';  
        else if (score >= 60)
             grade = 'D';
        else
             grade = 'E';
        printf("grade:%c\n", grade);
        return 0;
}
2017-02-07 20:41
HZYCR
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2017-2-7
收藏
得分:0 
可以用do-while语句。
2017-02-07 21:13
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
简单并且严谨一点可以这样~fflush(stdin)是用来清除缓冲区的~防止因非法输入而造成bug~

程序代码:
       while (scanf("%d", &score)==0||(score < 0 || score > 100))
       {
             printf("Input error!\n");
             printf("Please input score:");
             fflush(stdin);
        
       }

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-07 21:48
快速回复:不满足while循环条件时,为什么还会执行while语句?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.074131 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved