标题:小白求教一个简单的问题
只看楼主
fclzss
Rank: 2
等 级:论坛游民
帖 子:32
专家分:11
注 册:2018-11-7
结帖率:75%
已结贴  问题点数:20 回复次数:7 
小白求教一个简单的问题
这是一个判断两个输入数字大小的程序,在输入的时候,输入数字没有问题,但是假如输入的是字母,程序需要重新输入,问题就在这,为什么我这个就循环不出来了,如图所示






搜索更多相关主题的帖子: 输入 数字 重新 循环 如图所示 
2018-11-07 19:04
no1xijin
Rank: 9Rank: 9Rank: 9
来 自:江西
等 级:贵宾
威 望:20
帖 子:211
专家分:1207
注 册:2015-7-8
得分:7 
代码文字贴出来下

126邮箱联系方式:no1xijin@126. com
2018-11-07 19:08
fclzss
Rank: 2
等 级:论坛游民
帖 子:32
专家分:11
注 册:2018-11-7
得分:0 
回复 2楼 no1xijin
#include<stdio.h>
double imin(double,double);
int main(void)
{
    double a,b,min;
    printf("**********************************\n");
    printf("this program is comparing two num.\n");
    printf("**********************************\n");
    printf("please enter first number(q to quit):");
    while(scanf("%lf",&a)!=1)
    {
        printf("please enter a float number\n");
    }
    printf("please enter second number(q to quit):");
    while(scanf("%lf",&b)!=1)
    {
        printf("please enter a float number\n");
    }
    printf("min number is %lf\n",imin(a,b));
    printf("bye\n");
    return 0;

}
double imin(double x,double y)
{
    if(x<y)
      return x;
    else
      return y;
}
2018-11-07 19:09
Tomorrw_I
Rank: 10Rank: 10Rank: 10
等 级:禁止访问
威 望:6
帖 子:406
专家分:1712
注 册:2018-10-16
得分:7 
void main()
{
int a;
int b;
int c;
printf("请输入三个整数:");
int x=scanf("%d%d%d",&a,&b,&c);
printf("%d/n%d/n",a,x);
}
1.scanf()函数有返回值且为int型。
2.scanf()函数返回的值为:正确按指定格式输入变量的个数;也即能正确接收到值的变量个数。
从上边的例子中可以得到验证,这里用变量x接收scanf()函数的返回值,并输出显示出来。

当运行中输入三个整数:5 6 7则x的值为3;

如果输入5 6 d(即给c 赋值不正确)则x的值为2;

如果输入5 t d(即给b和c 赋值不正确)则x的值为1;

当scanf函数的第一个变量格式不正确时返回值为0,即,当scanf函数的第n个变量格式不正确时,返回值为n-1

学C有用吗?
学C++有前途吗?
数据库有必要学吗?
……
别问,你还什么都不会,学就对了
……
2018-11-07 19:35
Tomorrw_I
Rank: 10Rank: 10Rank: 10
等 级:禁止访问
威 望:6
帖 子:406
专家分:1712
注 册:2018-10-16
得分:0 
看下这段文字,你就明白为什么了!
scanf("%lf",&a)!=1    当输入数字时,scanf的返回值是1,跳过循环!
                      当输入格式不对时,scanf的返回值是0,直接运行循环体! 而且循环体内,没有退出循环的语句,无限循环了

学C有用吗?
学C++有前途吗?
数据库有必要学吗?
……
别问,你还什么都不会,学就对了
……
2018-11-07 19:38
fclzss
Rank: 2
等 级:论坛游民
帖 子:32
专家分:11
注 册:2018-11-7
得分:0 
回复 5楼 Tomorrw_I
我懂了,太感谢大神
2018-11-07 19:42
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:7 
主要原因是
scanf 等函数 从stdin获取数据
格式控制符 %lf 而数据不符合%lf格式
会造成 scanf 停止获取数据 输入的数据滞留在stdin里面
你的代码执行循环 输出提示 然后再次运行scanf从stdin获取数据
这时候 stdin里面的数据还是不符合%lf的格式 所以一直重复
修改方式是 在循环里面清空 stdin

https://zh.
2018-11-08 01:01
fclzss
Rank: 2
等 级:论坛游民
帖 子:32
专家分:11
注 册:2018-11-7
得分:0 
回复 7楼 lin5161678
大神,我今天又遇到了这样的问题了.......又循环不出来了,而且重新输入不了......最后没办法在循环里面加了个getchar总算能循环输入,但是还是有点不太明白.....
2018-11-09 21:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491064-1-1.html




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

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