Не получается загрузить структуру в динамическую память - C (СИ)

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

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

Есть массив структур треугольников, нужно прочесть из файла длину 3-х сторон каждого треугольника. Допустим есть txt файл, в нем записано "1 1 1 2 2 2" грубо говоря функция должна прочесть из файла 2 треугольника, 1 со сторонами 1 1 1 и 2 со сторонами 2 2 2. Перепробовал уже как угодно...Подскажите что-нибудь
int load (Triangle **z)   
{
    FILE *f;
    int n;
    char FileName[15];
    printf( "Enter the name of file: \n" );
    scanf( "%s",FileName );
    strcat(FileName,".txt");
    if ((f=fopen(FileName, "r")) != NULL) 
    {
       n=0;
       *z= ( Triangle*)malloc(sizeof( Triangle)); 
       fscanf (f,"%lg %lg %lg",&(*z)[0].n,&(*z)[0].m,&(*z)[0].o);
 
    while (!feof(f))
   
              {
                  n++;
                  *z = realloc(*z, (n+1) * sizeof(Triangle));
                  fscanf (f,"%lg %lg %lg",&(*z)[n].n,&(*z)[n].m,&(*z)[n].o);
               
              }
        fclose(f);
        printf("Load successful.\n");   
        }
        return n;
}

Решение задачи: «Не получается загрузить структуру в динамическую память»

textual
Листинг программы
typedef struct 
{
    float a, b, c;
} Triangle;
 
#include <stdio.h>
int load(Triangle *triangle, size_t *count)
{
    FILE *f = fopen("<pathToFile>", "r");
    
    if (f != NULL)
    {
        for(int i = 0; !feof(f); i++)
        {
            if(fscanf("%f %f %f", &triangle[i].a, &triangle[i].b, &triangle[i].c) == 3)
                *count++;
        }
 
        fclose(f);
        printf("Load successful.\n");
        return 1;
    }
 
    return 0;
}
 
int main(void)
{
    system("chcp 1251");
    int n = 0, count = 0;
 
    scanf("%d", &n);
 
    Triangle *triangle = malloc(sizeof(Triangle) * n);
    if (load(triangle, count))
    {
        //делаем что-то
    }
 
    
    
    return 0;
}

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

  1. В начале кода объявляется структура Triangle, которая содержит три поля типа float - a, b и c.
  2. Затем подключается стандартная библиотека stdio.h, которая содержит функции для ввода и вывода данных.
  3. Определяется функция load, которая принимает указатель на массив структур Triangle и указатель на переменную count, которая отслеживает количество успешно загруженных структур.
  4. Внутри функции load открывается файл для чтения с помощью функции fopen.
  5. Если файл успешно открыт, то в цикле for происходит чтение данных из файла с помощью функции fscanf.
  6. fscanf считывает три значения типа float и сохраняет их в соответствующие поля структуры Triangle.
  7. Если чтение данных прошло успешно (то есть fscanf вернул значение 3), то переменная count увеличивается на 1.
  8. После окончания цикла for файл закрывается с помощью функции fclose.
  9. Если файл был успешно открыт и закрыт, и все данные были успешно считаны, то функция возвращает 1. В противном случае возвращается 0.
  10. В функции main сначала выполняется команда chcp 1251, которая задает кодировку консоли как 1251 (Windows Cyrillic).
  11. Затем пользователю предлагается ввести число n, которое определяет количество структур Triangle, которые нужно загрузить.
  12. После ввода числа n выделяется память под массив структур Triangle с помощью функции malloc.
  13. Если выделение памяти прошло успешно, то вызывается функция load с передачей указателя на массив структур Triangle и указателя на переменную count.
  14. Если функция load вернула значение 1, то можно выполнять какие-то действия с загруженными данными.
  15. В конце функции main возвращается 0, что означает успешное завершение программы.

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


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

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

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