Массив не заполняется для основной программы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Возникла такая проблема: есть динамический массив структур
Product *database = NULL;
есть функция, которая добавляет в массив структуру, заполняет ее и возвращает количество структур в массиве
int isGetProduct(Product *database, int countProducts, char *line)
Проблема в том, что массив не заполняется для основной программы (тот же самый кусок заполнения из функции в основной программе прекрасно работает) Подскажите, пожалуйста, что у меня не так с объевляением

Решение задачи: «Массив не заполняется для основной программы»

textual
Листинг программы
#define MAXLEN 255//с проверкой ввода
#define SEPARATOR '\t'
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
typedef struct AA
{
    int id, price, count;
    char name[MAXLEN];
}Product;
 
void isGetVal(char *line, char *strVal, int *i)
{
    int j = 0;
    while((line[*i] != SEPARATOR) && (*i < strlen(line)) && line[*i] != '\n')
    {
        strVal[j] = line[(*i)++];
        j++;
    }
    strVal[j] = '\0';
    (*i)++;
}
 
Product *isGetProduct(Product *database, int *countProducts, char *line)
{
    int i = 0, j = 0;
    char strId[MAXLEN];
    char strName[MAXLEN];
    char strPrice[MAXLEN];
    char strCount[MAXLEN];
    database = realloc(database, (*countProducts + 1) * sizeof(Product));
    isGetVal(line, strId, &i);
    isGetVal(line, strName, &i);
    isGetVal(line, strPrice, &i);
    isGetVal(line, strCount, &i);
    database[*countProducts].id = atoi(strId);
    strcpy(database[*countProducts].name, strName);
    database[*countProducts].price = atoi(strPrice);
    database[*countProducts].count = atoi(strCount);
    //printf("%d\n", database[0].price);
    (*countProducts)++;
    return database;
}
 
void printDB(Product *database, int countProducts)
{
    int i;
    for(i = 0; i < countProducts; i++)
    {
        printf("%d %s %d %d\n", database[i].id, database[i].name,
        database[i].price, database[i].count);
    }
}
 
int main()
{
    Product *database = NULL;
    FILE *dbFile;
    char line[MAXLEN];
    int countProducts = 0;
    dbFile = fopen("database.txt", "rt");
    while(!feof(dbFile))
    {
        fgets(line, MAXLEN - 1, dbFile);
        database = isGetProduct(database, &countProducts, line);
    }
    printDB(database, countProducts);
    /*database = (Product*)realloc(database, (countProducts + 1) * sizeof(Product));
    database[countProducts].id = 1;
    strcpy(database[countProducts].name, "test1");
    database[countProducts].price = 2;
    database[countProducts].count = 3;
    countProducts++;
    database = (Product*)realloc(database, (countProducts + 1) * sizeof(Product));
    database[countProducts].id = 4;
    strcpy(database[countProducts].name, "test2");
    database[countProducts].price = 5;
    database[countProducts].count = 6;
    printf("%d\n", database[1].price);
    printDB(database, countProducts);
    free(database);
    getchar();*/
    fclose(dbFile);
    free(database);
    system("pause");
    return 0;
}

Объяснение кода листинга программы

  1. В этом коде используется структура Product, которая содержит поля id, price, count и массив символов name для хранения информации о товарах.
  2. Функция isGetProduct считывает строку из файла и преобразует ее в числовые значения для полей id, price и count структуры Product.
  3. Функция printDB выводит информацию о товарах из структуры database в консоль.
  4. В функции main открывается файл database.txt для чтения и создается пустой массив database для хранения товаров.
  5. Затем происходит чтение каждой строки из файла и добавление товара в массив database с помощью функции isGetProduct.
  6. После чтения всех строк из файла, выводится информация о всех товарах в консоль с помощью функции printDB.
  7. В конце программы происходит освобождение памяти, выделенной под массив database, и закрытие консоли.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.846 из 5
Похожие ответы