Как внести все данные из текстового файла в односвязный список Си?

Чтение данных из текстового файла и занесение их в односвязный список в языке программирования C можно реализовать следующим образом:

  1. Создание структуры, которая будет использоваться для хранения данных в списке. Например, если у нас есть файл, содержащий строки с именами и возрастами, мы можем создать структуру, включающую два поля: имя (строка) и возраст (целое число).
typedef struct Node {
    char name[50];
    int age;
    struct Node* next;
} Node;
  1. Открытие файла для чтения и проверка, удалось ли открыть файл:
FILE* file = fopen("data.txt", "r");
if (file == NULL) {
    printf("Ошибка при открытии файла");
    return;
}
  1. Инициализация указателя на голову списка:
Node* head = NULL;
  1. Создание функции для добавления элементов в список. Функция принимает указатель на указатель головного узла списка и данные, которые нужно добавить:
void addNode(Node** head, char name[], int age) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    strcpy(newNode->name, name);
    newNode->age = age;
    newNode->next = NULL;
    
    if (*head == NULL) {
        *head = newNode;
    } else {
        Node* current = *head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = newNode;
    }
}
  1. Создание цикла для чтения данных из файла. Мы будем использовать fscanf для чтения строк и чисел из файла и передавать их в функцию addNode:
char name[50];
int age;
while (fscanf(file, "%49s %d", name, &age) == 2) {
    addNode(&head, name, age);
}

Обратите внимание, что в fscanf использовано "%49s" для чтения строки с длиной не более 49 символов. Это предотвращает переполнение буфера при чтении длинных строк.

  1. Закрытие файла после завершения чтения:
fclose(file);
  1. После завершения цикла, весь файл будет прочитан и данные будут храниться в односвязном списке. Мы можем использовать цикл для вывода данных:
Node* current = head;
while (current != NULL) {
    printf("Имя: %s, Возраст: %dn", current->name, current->age);
    current = current->next;
}

В результате выполнения этих шагов, все данные из текстового файла будут соответствующим образом добавлены в односвязный список и отображены на экране.