Реализация динамического выделения структуры в C - PullRequest
1 голос
/ 17 октября 2019

Может кто-нибудь сказать мне, почему мой код не работает? Это правильно компилируется, но во время выполнения перестает выдавать сообщение об ошибке.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct book
{
    char cName[100];
    float fPrice;
};
struct book *ptr;

void display(int j)
{
    int i=0;
    ptr = ptr - j;
    while(i<j)
    {
        printf("Book name: %s\n",ptr->cName);
        printf("Price: %f\n\n",ptr->fPrice);
        ptr++;
        i++;
    }
}
int main()
{
    int i,n;
    printf("How many entries do you want to make: ");
    scanf("%d",&n);

    ptr = (struct book*)malloc(n*sizeof(struct book));
    for(i=0;i<n;i++)
    {
        printf("Enter the Name: ");
        scanf("%s",ptr->cName);
        printf("Enter price: ");
        scanf("%f",ptr->fPrice);
        ptr++;  
    }
    display(n);
    return 0;
}

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я очень плохо знаком с C, если мое кодирование причиняет вам вред, я искренне извиняюсь заранее. Просто хочу понять программу, а не быстро ее закончить.

1 Ответ

3 голосов
/ 17 октября 2019

Это здесь:

scanf("%f",ptr->fPrice);

Должно быть так:

scanf("%f",&ptr->fPrice); // with a "&"

Поскольку вы хотите передать указатель на float.


С другой стороны, всегда слушайте предупреждения вашего компилятора. Они могут указать на шаблоны кода, которые обычно являются ошибками. Например, ваш код может вызвать предупреждение в строках 'scanf' : format string '%f' requires an argument of type 'float *', but variadic argument 1 has type 'double'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...