Я хочу прочитать данные из ФАЙЛА и сохранить их в связанном списке, и моя проблема, очевидно, связана с командой чтения "fscanf".
Я пытаюсь создать функцию, которая получает заголовок связанного списка и указатель на файл. Функция считывает данные из файла и сохраняет их в узле, а затем соединяет узел с началом связанного списка, то есть с заголовком, а не с концом.
#include <stdio.h>
#include <stdlib.h>
#define NameLength 15
typedef struct Product {
char ProductName[NameLength];
int Quantity;
int Price;
char Premium;
}Product;
typedef struct ProductList {
Product P;
struct ProductList* next;
}ProductList;
void DeleteList(ProductList*);
void ErrorMsg(const char*);
int CheckInList(ProductList*, const char*);
void CreateProducts(ProductList *head, FILE *fp) {
ProductList *temp = (ProductList*)malloc(sizeof(ProductList));
//If the dynamic memory allocation for temp has failed, print a
message and exit the program.
if (!temp) {
DeleteList(head);
ErrorMsg("Error: Memory allocation of temp in CreateProducts has
failed.");
}
temp->next = NULL;
while (!feof(fp)) {
fscanf(fp, "%s%d%d%c", temp->P.ProductName, &temp->P.Quantity,
&temp->P.Price, temp->P.Premium);
if (CheckInList(head, temp->P.ProductName))
printf("Error: Product is already found in the list.\n");
else {
if (temp->P.Quantity < 0)
printf("Error: Quantity of the product cannot be
negative.\n");
else {
if (temp->P.Price < 0)
printf("Error: Price of the product cannot be
negative.\n");
else
{
//Adding the product to the beginning of the list
every time.
if (head == NULL)
head = temp;
else
{
temp->next = head->next;
head->next = temp;
}
}
}
}
}
if (head != NULL)
printf("Products' information have been received.\n");
else
ErrorMsg("Products' information have NOT been received.");
}