我有一个家庭作业任务,用有关游览的数据创建一个链表,然后将数据写入二进制文件中,然后读取它。但是当我编写一个显示所有列表的函数时,它会显示我创建的列表,但同时显示随机数据。
我尝试使用不同的循环,但是出于某种原因,for循环不显示任何内容,只是崩溃。我是C语言的初学者,所以对不起,如果这个问题太愚蠢了...:D
phrase(s, [peter, is, father, of, guido]), phrase(s, [she, is, a, female]).
我不会显示整个代码,因为另一部分可以工作 我用以下代码编写列表:
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);
这是显示的随机数据: 游览ID为└ 持续时间为0天 出发日期是 价格是0.00 游览ID为И#▌ 持续时间是-202182160天 出发日期是фхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■а5▐ 价格是-1。#R
答案 0 :(得分:1)
您的主要问题就在这里。
if(fread(&temp->data, sizeof(excursion), 1, fp) != 1)
还有这里
if(fwrite(&temp->data,sizeof(excursion), 1, fp) != 1)
因此,您似乎正在尝试将整个结构写入文件并读取整个结构,但是由于某种原因,您正在告诉它将其放入数据中或从数据中取出。数据不是整个结构,而是结构内部的11个字节的字符数组。
执行此操作。
if(fread(temp, sizeof(excursion), 1, fp) != 1)
和
if(fwrite(temp,sizeof(excursion), 1, fp) != 1)