Чтение данных из текстового файла и занесение их в односвязный список в языке программирования C можно реализовать следующим образом:
1. Создание структуры, которая будет использоваться для хранения данных в списке. Например, если у нас есть файл, содержащий строки с именами и возрастами, мы можем создать структуру, включающую два поля: имя (строка) и возраст (целое число).
typedef struct Node { char name[50]; int age; struct Node* next; } Node;
2. Открытие файла для чтения и проверка, удалось ли открыть файл:
FILE* file = fopen("data.txt", "r"); if (file == NULL) { printf("Ошибка при открытии файла"); return; }
3. Инициализация указателя на голову списка:
Node* head = NULL;
4. Создание функции для добавления элементов в список. Функция принимает указатель на указатель головного узла списка и данные, которые нужно добавить:
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; } }
5. Создание цикла для чтения данных из файла. Мы будем использовать fscanf для чтения строк и чисел из файла и передавать их в функцию addNode:
char name[50]; int age; while (fscanf(file, "%49s %d", name, &age) == 2) { addNode(&head, name, age); }
Обратите внимание, что в fscanf использовано "%49s" для чтения строки с длиной не более 49 символов. Это предотвращает переполнение буфера при чтении длинных строк.
6. Закрытие файла после завершения чтения:
fclose(file);
7. После завершения цикла, весь файл будет прочитан и данные будут храниться в односвязном списке. Мы можем использовать цикл для вывода данных:
Node* current = head; while (current != NULL) { printf("Имя: %s, Возраст: %dn", current->name, current->age); current = current->next; }
В результате выполнения этих шагов, все данные из текстового файла будут соответствующим образом добавлены в односвязный список и отображены на экране.