Запись действительных чисел из файла в линейный однонаправленный список - C (СИ)
Формулировка задачи:
Решение задачи: «Запись действительных чисел из файла в линейный однонаправленный список»
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
struct TList
{
int value;
struct TList* next;
};
//----------------------------------------------//
struct TList* Push(struct TList** list, int value)
{
struct TList* node = (struct TList*) malloc(sizeof(struct TList));
node->value = value;
node->next = *list;
*list = node;
return *list;
}
//----------------------------------------------//
void Print(struct TList* list)
{
while (list)
{
fprintf(stdout, "%d ", list->value);
list = list->next;
}
}
//----------------------------------------------//
bool Load(const char* fname, struct TList** list)
{
FILE* f = fopen(fname, "r");
if (f == NULL)
{
return false;
}
int value = 0;
while (feof(f) == false)
{
if (fscanf(f, "%d", &value) == 1)
{
Push(list, value);
}
}
fclose(f);
return true;
}
//----------------------------------------------//
int main(int argc, const char* argv[])
{
if (argc != 2)
{
fprintf(stderr, "Usage: program <FILE>\n");
return EXIT_FAILURE;
}
struct TList* list = NULL;
if (Load(argv[1], &list) == false)
{
fprintf(stderr, "Error: file '%s' not load ...\n", argv[1]);
return EXIT_FAILURE;
}
Print(list);
return EXIT_SUCCESS;
}
Объяснение кода листинга программы
В этом коде определен тип структуры TList, который представляет собой односвязный список, содержащий целочисленные значения. Затем определены две функции: Push и Print. Push добавляет новый узел в начало списка, а Print выводит значения всех узлов в консоль.
Функция Load считывает файл построчно и добавляет каждое целочисленное значение в список, используя функцию Push. Функция возвращает true, если файл успешно прочитан и список успешно заполнен, и false в случае ошибки при открытии файла или чтении из него.
В функции main создается пустой список и передается в функцию Load. Если файл успешно прочитан и список успешно заполнен, выводится список с помощью функции Print. В противном случае выводится сообщение об ошибке и программа завершается с кодом EXIT_FAILURE.