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;
}

しかし、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;
}

なぜこれがそうなのか、誰かがわざわざ説明するだろうか?理由は思いつかない。前もって感謝します。

4

1 に答える 1

1

一つには、解析文字列が正しくありません。doubleの場合、float用の「%f」ではなく「%lf」である必要があります。

第2に、一般に、浮動小数点型の同等性の比較は、本質的に近似的であるためエラーが発生しやすくなりますが、この場合、0は正確に表すことができる値です。

于 2012-12-28T15:03:15.790 に答える