程序正在使用整数,但不是双精度

时间:2012-12-28 14:57:09

标签: types integer double

我应该输入实数,直到遇到输入为0,然后程序应该终止。我得到这个代码适用于整数数据类型:

#include<stdio.h>

int main()
{
    int i;
    int a[60];

    for(i=0;i<60;i++)
        a[i]=-1;

    for(i=0;;i++)
    {
        scanf("%d",&a[i]);
        if(a[i]==0)
            break;
    }

    return 0;
}

但是当我在double数据类型上尝试相同的代码时,输​​入0时不会发生程序终止。这是代码:

#include<stdio.h>

int main()
{
    int i;
    double a[60];

    for(i=0;i<60;i++)
        a[i]=-1.0;

    for(i=0;;i++)
    {
        scanf("%f",&a[i]);
        if(a[i]==0.0)
            break;
    }

    return 0;
}

有人会费心解释为什么会这样吗?我想不出任何理由。提前谢谢。

1 个答案:

答案 0 :(得分:1)

首先,你的解析字符串是不正确的:对于double,它应该是“%lf”,而不是“%f”,这是浮点数。

其次,通常比较浮点类型的相等性是容易出错的,因为它们本质上是近似的,尽管在这种情况下,0是一个可以精确表示的值。