Я пишу этот код для проекта колледжа, и мне нужно загрузить этот текстовый файл в односвязный список. Но при печати он печатает только первую строку в файле (первый узел в LinkedList).
Строки в файлах .txt выглядят следующим образом:
ФОЛЬКСВАГЕНСКИЙ ГОЛЬФ 2017 БЕЛЫЙ 120000
ФОЛЬКСВАГЕНСКИЙ ГОЛЬФ 2017 ЧЕРНЫЙ 121000
ФОЛЬКСВАГЕН ПОЛО 2018 ОРАНЖЕВЫЙ 95000
VOLKSWAGEN CADDY 2015 ЧЕРНЫЙ 145000
VOLKSWAGEN CADDY 2015 BLACK 145000 и т. Д.
Любая помощь будет принята с благодарностью, спасибо!
Смотрите код:
struct sCar{
char manufacturer[15];
char model[15];
int year;
char colour[10];
float price;
struct sCar *nextInLine;
};
//Changing name for convenience.
typedef struct sCar * LIST;
typedef struct sCar * NODE;
int main()
{
printf("\n\n** START **\n\n");
LIST carsList;
carsList = MakeEmpty(NULL); //Initialized. (carsList) is now the Head.
NODE temp;
temp = (NODE)malloc(sizeof(struct sCar));
FILE *fPtr;
if ((fPtr = fopen("cars.dat", "r")) == NULL)
puts("File could not be opened");
else
{
fscanf(fPtr, "%s %s %d %s %f", &temp->manufacturer, &temp->model,
&temp->year, &temp->colour, &temp->price);
if(carsList->nextInLine == NULL)
{
carsList->nextInLine = temp;
temp->nextInLine = NULL;
}
else
while(fscanf(fPtr, "%s %s %d %s %f", &temp->manufacturer, &temp->model, &temp->year, &temp->colour, &temp->price) == 5)
{
NODE newNode;
newNode = (NODE)malloc(sizeof(struct sCar));
fscanf(fPtr, "%s %s %d %s %f", &newNode->manufacturer, &newNode->model, &newNode->year, &newNode->colour, &newNode->price);
temp->nextInLine = newNode;
temp = newNode;
temp->nextInLine = NULL;
}
}
printNodes(carsList);
return 0;
}
LIST MakeEmpty(LIST L)
{
if(L != NULL)
DeleteList(L);
L = NULL;
L = (LIST)malloc(sizeof(struct sCar));
if(L==NULL)
printf("Out of Memory. Can't Allocate List.");
else
L->nextInLine = NULL;
return L;
}
void printNodes(LIST L)
{
LIST temp;
temp = L->nextInLine;
while(temp != NULL)
{
printf("\n\nManufacturer: %s", temp->manufacturer);
printf("\nModel: %s", temp->model);
printf("\nYear: %d", temp->year);
printf("\nColour: %s", temp->colour);
printf("\nPrice: %.2f\n", temp->price);
temp = temp->nextInLine;
}
}