学习电脑 发表于 2016-10-20 08:02:32

C语言问题


# include <stdio.h>


int main(void)
{
   float a,b,t,c,d;
   printf("请输入两个整数:\n");
   printf("a = ");
   c = scanf("%f", &a);
   printf("b = ");
   d = scanf("%f", &b);
   printf("%f %f", c,d);


   if (c!=1 || d!=1)
           {
                   printf("您输入的不是整数,请重新输入:\n");
                   printf("a = ");
                   scanf("%f", &a);
                   printf("b = ");
                   scanf("%f", &b);
           }


为什么第一个输入数字,第二个输入字母时,等下执行if结果就莫名其妙?没有执行scanf?

ryxcaixia 发表于 2016-10-20 08:02:33

int main(void)
{
float a,b;
int c d;
   printf("请输入两个整数:\n");
   printf("a = ");
   c = scanf("%f", &a);
   printf("b = ");
   d = scanf("%f", &b);
   printf("%f %f", c,d);


   if (c!=1 || d!=1)
         {
                   printf("您输入的不是整数,请重新输入:\n");
                   printf("a = ");
                   scanf("%f", &a);
                   printf("b = ");
                   scanf("%f", &b);
         }
}
浮点类型和整形的相等或不等比较不能直接比
比如
int   a = 1;
floatb = 1; (其实是1.0000000000000000000..)

a和b肯定不相等

所以你要想比较浮点型 要类似这种
#define EPSILON 0.00000000001 // (.0个数根据精度需要来定)

float a;
float b;

if (a - b < EPSILON)
printf("a < b\n");

if (a - b > EPSILON)
printf("a > b\n");

if (a - b <= EPSILON ) // 误差在你定义的范围内就认为相等了
printf("a == b\n");

围棋小鱼泡 发表于 2016-10-20 08:15:57

逻辑错误,c d在if 前没有输入啊

musilintan 发表于 2016-10-20 09:31:55

因为第二个输入的是字母,scanf的返回值为0,scanf执行失败。这时候需要使用fflush(stdin)来清理输入缓冲区。这样后面的scanf才能正常输入。还有就是浮点型比较不能直接“!=”,这样不严谨。具体看3L的回复。

alltolove 发表于 2016-10-20 10:40:58

数字跟字母返回值都是0,所以if语句条件不成立所以就没有再执行scanf了

学习电脑 发表于 2016-10-20 20:29:58

alltolove 发表于 2016-10-20 10:40
数字跟字母返回值都是0,所以if语句条件不成立所以就没有再执行scanf了

为什么if哪里没有显示输入?

无敌丶 发表于 2016-10-25 15:10:00

ryxcaixia 发表于 2016-10-20 09:23
int main(void)
{
float a,b;


scanf("%d",&c);
scanf("%d",&d);

暴力书生 发表于 2016-10-26 17:18:09

看看运算符优先级

谦虚求学 发表于 2016-11-1 14:32:48

{:5_107:}

学习电脑 发表于 2016-11-2 10:19:26

musilintan 发表于 2016-10-20 09:31
因为第二个输入的是字母,scanf的返回值为0,scanf执行失败。这时候需要使用fflush(stdin)来清理输入缓冲区 ...

那怎样才能使scanf执行成功

immortalfaith 发表于 2016-11-16 20:51:36

逻辑错误

四十二 发表于 2016-11-16 23:11:38

本帖最后由 四十二 于 2016-11-16 23:13 编辑

只有四楼说到点子上了~!!!

另外,在比较新的c规范里尽量不要使用fflush这个指令,具体用什么我卖个关子,楼主把鱼币打赏我之后我会一步一步指点你调出来,调出为止。

Damn_it 发表于 2016-11-21 21:31:46

我只知道存在浮点数比较问题{:10_243:}

漫步Roam 发表于 2016-11-24 12:56:49

3L说的好详细{:10_245:}

zzg9929 发表于 2016-11-24 16:45:34

本帖最后由 zzg9929 于 2016-11-24 16:46 编辑

清除输入缓冲区~你输入第一个数,回车也跟着存进去了就是你的输入缓冲区有个\0
页: [1]
查看完整版本: C语言问题