Компилятор DM C - ошибка «Плавающая точка не загружена» в C - PullRequest
0 голосов
/ 06 мая 2020

Когда я пытаюсь ввести в свою программу тип float или double, это дает мне ошибку времени выполнения «Плавающая точка не загружена» ... Я использую DM C компилятор

В этой программе я пытаюсь принять ввод от пользователя, все работает нормально. Вместо ввода цены я определил цену в структуре типа double, и программа выдает ошибку времени выполнения с плавающей точкой не загружена . Я искал inte rnet, но ничего не нашел.

Что вызывает эту ошибку и как ее устранить?

вот экран с ошибкой: SCREENSHOT of ERROR

вот код: -

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct node {
    char isbn[16];
    char title[60];
    char author[40];
    double price;
    int issueSTATUS;
    long count;
    struct node *next;
};

struct node *bookdb;

void display();

void main() {
    bookdb = NULL;
    append();
    display();
    getch();
}

void append() {
    struct node *temp = (struct node *) malloc(sizeof(struct node));
    printf("Enter the Book ISBN : ");
    scanf("%s", temp->isbn);
    printf("Enter the Book Name : ");
    scanf("%s", temp->title);
    printf("Enter the Book Author Name : ");
    scanf("%s", temp->author);
    printf("Enter the Book Price : ");
    scanf("%f", &temp->price); //<--------------------------here's the problem---------------------
    temp->issueSTATUS = 0;
    temp->next = NULL;

    if(bookdb == NULL) {
        bookdb = temp;
        bookdb->count++;
    } else {
        struct node *iterator = bookdb;
        while(iterator->next != NULL) {
            iterator = iterator->next;
        }
        iterator->next = temp;
    }
}

void display() {
    struct node *temp = bookdb;
    while(temp->next != NULL) {
        printf("|%-16s|%-60s|%-20s|$%-5.2f|");
        if(temp->issueSTATUS == 1) {
            printf("YES\n");
        } else {
            printf("NO\n");
        }
        temp = temp->next;
    }
    printf("|%-16s|%-60s|%-20s|%-5.2f|");
    if(temp->issueSTATUS == 1) {
        printf("YES\n");
    } else {
        printf("NO\n");
    }

}

1 Ответ

2 голосов
/ 06 мая 2020

Сначала проверьте, включена ли в вашей версии DM C использование типов с плавающей запятой. Существует высокая вероятность того, что это вызовет проблему согласно документации:

Плавающая точка не загружена

Программа пытается выполнять операции с плавающей запятой, но время выполнения с плавающей запятой система не связана. Запустите OBJ2ASM для объектного файла, чтобы убедиться, что внешняя ссылка _fltused была сгенерирована. В противном случае удалите операцию с плавающей запятой.

Источник: https://digitalmars.com/ctg/runtime.html

Во-вторых, если типы с плавающей запятой включены, учтите:

scanf("%f", &temp->price);

Спецификатор формата %f в scanf() ожидает аргумент типа * float, но &temp->price имеет тип *double.

Вместо double используйте %lf:

scanf("%lf", &temp->price);

Примечания:

  1. Какова цель printf("|%-16s|%-60s|%-20s|%-5.2f|"); в display()? Атака на форматную строку? Это использование printf неверно. Каждый спецификатор формата требует наличия соответствующего соответствующего аргумента.

  2. Тип возврата main должен быть int, а не void.

  3. Рассмотрите возможность обновления до более современного компилятора, например, fe G CC с MingW-w64 на Windows.

...