Программа работает с целыми числами, но не с двойными

Я должен вводить реальные числа до тех пор, пока не будет встречен вход 0, затем программа должна завершиться. Я получил этот код для целочисленного типа данных:

#include

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

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
nl ja de
Вы пробовали printf ("% f", a [i]) после scanf , чтобы узнать, что ваша программа делает с вашего ввода?
добавлено автор user824425, источник

1 ответы

Во-первых, ваша строка синтаксического анализа неверна: для double он должен быть «% lf», а не «% f», который предназначен для поплавков.

Во-вторых, в целом сравнение типов с плавающей точкой для равенства является склонным к ошибкам, потому что они по своей природе являются приближенными, хотя в этом случае 0 является значением, которое может быть представлено точно.

1
добавлено
Спасибо. Дело в том, что я думал о том, что мой спецификатор преобразования ошибочен, но не смог понять, где проблема. Еще раз спасибо.
добавлено автор Toma Zdravkovic, источник