У меня есть домашнее задание: создать связанный список с данными об экскурсиях, записать их в двоичный файл и затем прочитать. Но когда я пишу функцию для отображения всех списков, она отображает списки, которые я создал, но также показывает случайные данные.
Я пытался использовать разные циклы, но по какой-то причине с циклом for он ничего не отображает, просто вылетает. Я новичок в C, поэтому прошу прощения, если вопрос слишком глупый ...: D
typedef struct {
char ID[20];
char date[11];
int duration;
double price;
} excursion;
typedef struct Trip {
excursion data;
struct Trip *next;
} trip;
trip *head=NULL;
trip *current=NULL;
void displayALL()
{
trip *temp;
temp = head;
while (temp != NULL) {
printf("ID of Excursion is %s\nDuration is %d days\nDate of departure is %s\nThe price is %.2f\n",
temp->data.ID, temp->data.duration, temp->data.date, temp->data.price);
temp = temp->next;
}
}
Я не буду показывать весь код, потому что другая часть работает
Я пишу списки с этим кодом:
FILE * fp;
trip *temp;
if ((fp = fopen("Excursion.bin", "wb")) == NULL) {
printf("Error opening file");
exit(1);
}
for (temp = head; temp != NULL; temp = temp->next) {
if (fwrite(&temp->data, sizeof(excursion), 1, fp) != 1) {
printf("Error in writing file\n");
exit(0);
}
}
fclose(fp);
и прочитайте с этим:
FILE *fp;
if ((fp = fopen("Excursion.bin", "rb")) == NULL) {
printf("No info added yet\n");
exit(1);
}
while (1) {
trip *temp = (trip*)malloc(sizeof(trip));
if (head == NULL) {
head = temp;
current = head;
current->next = NULL;
} else {
current->next = temp;
current=temp;
current->next = NULL;
}
if (fread(&temp->data, sizeof(excursion), 1, fp) != 1) {
break;
printf("Error reading file\n");
exit(0);
}
}
fclose(fp);
Это случайные данные, которые отображаются:
ID экскурсии └
Продолжительность 0 дней
Дата отправления
Цена 0,00
ID экскурсии - И # ▌
Продолжительность -202182160 дней
Дата отправления: дата ц · √№¤ ■ а5▐
Цена -1. # R