| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1582 人关注过本帖
标题:小白又双遇到问题了
取消只看楼主 加入收藏
fclzss
Rank: 2
等 级:论坛游民
帖 子:32
专家分:11
注 册:2018-11-7
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:5 
小白又双遇到问题了
上次经过Tomorrw_I大神的解释知道了自己循环不出来的原因了(感谢大神),结果这次又遇到一个问题,自己感觉好像问题类似。

这次是计算调和平均数,自己设计的算法是 输入两个浮点数据,如果输入的类型不对则重新输入,结果又跟上次一样当输入字母时程序进入死循环,无法重新输入也无法跳出,然后我就想了个办法用while 和getchar结果成功了,但是我有点不明白其中的原因,请大神解释一下,感谢
图一 死循环的程序
图片附件: 游客没有浏览图片的权限,请 登录注册

图二 可行的程序
图片附件: 游客没有浏览图片的权限,请 登录注册

搜索更多相关主题的帖子: 原因 结果 输入 重新 死循环 
2018-11-09 21:22
fclzss
Rank: 2
等 级:论坛游民
帖 子:32
专家分:11
注 册:2018-11-7
收藏
得分:0 
回复 楼主 fclzss
死循环语句


#include<stdio.h>
float average_number(float a,float b);
int main(void)
{
    float num1,num2;
    int a,b;
    printf("this program caculate average.\n");
    printf("now please enter first num:");
    a=scanf("%f",&num1);
    while(a!=1)
    {
        printf("please enter a float number:");
        a=scanf("%f",&num1);
    }
    printf("now enter second number:");
    b=scanf("%f",&num2);
    while(b!=1)
    {
        printf("please enter a float number:");
        b=scanf("%f",&num2);
    }
    printf("%f\n", average_number( num1, num2));
    printf("bye\n");
    return 0;

}
float average_number(float a,float b)
{
    float aver;
    a=1/a;
    b=1/b;
    aver=a+b;
    aver=1/aver;
    return aver;
}
2018-11-09 21:23
fclzss
Rank: 2
等 级:论坛游民
帖 子:32
专家分:11
注 册:2018-11-7
收藏
得分:0 
回复 楼主 fclzss
可行语句

#include<stdio.h>
float average_number(float a,float b);
int main(void)
{
    float num1,num2;
    int a,b;
    printf("this program caculate average.\n");
    printf("now please enter first num:");
    a=scanf("%f",&num1);
    while(a!=1)
    {
        while(getchar()!='\n')
            continue;
        printf("please enter a float number:");
        a=scanf("%f",&num1);
    }
    printf("now enter second number:");
    b=scanf("%f",&num2);
    while(b!=1)
    {
        while(getchar()!='\n')
            continue;
        printf("please enter a float number:");
        b=scanf("%f",&num2);
    }
    printf("%f\n", average_number( num1, num2));
    printf("bye\n");
    return 0;

}
float average_number(float a,float b)
{
    float aver;
    a=1/a;
    b=1/b;
    aver=a+b;
    aver=1/aver;
    return aver;
}
2018-11-09 21:23
fclzss
Rank: 2
等 级:论坛游民
帖 子:32
专家分:11
注 册:2018-11-7
收藏
得分:0 
回复 3楼 fclzss
再一次给大神献上膝盖,我差不多懂了,是不是可以理解为数据在缓冲区成功读取一个就删掉一个,如果不成功则留在缓冲区,所以导致无限循环,看来我需要看一下缓冲区和数据流的知识了,大佬有什么推荐给我这个小白么
2018-11-09 21:53
fclzss
Rank: 2
等 级:论坛游民
帖 子:32
专家分:11
注 册:2018-11-7
收藏
得分:0 
回复 4楼 幻紫灵心
感谢大神,你昨天说的我明白了,再经过4楼和你今天的解释这个问题我就全懂了
2018-11-09 21:59
fclzss
Rank: 2
等 级:论坛游民
帖 子:32
专家分:11
注 册:2018-11-7
收藏
得分:0 
回复 8楼 Tomorrw_I
这个比喻真特么形象。这两天做的编程题目中全是要求要求有选择界面外加重复输入,做的我头晕,越想越不明白根本原因,大脑都快宕机了
图片附件: 游客没有浏览图片的权限,请 登录注册
2018-11-09 22:15
快速回复:小白又双遇到问题了
数据加载中...
 
   



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

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