1

我应该输入实数,直到遇到输入 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;
}

但是当我在双数据类型上尝试相同的代码时,在输入 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;
}

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

4

1 回答 1

1

一方面,您的解析字符串不正确:对于双精度,它应该是“%lf”,而不是用于浮点数的“%f”。

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

于 2012-12-28T15:03:15.790 回答