gpt4 book ai didi

c - 程序从文件读取时显示随机列表数据

转载 作者:行者123 更新时间:2023-11-30 19:02:16 25 4
gpt4 key购买 nike

我有一个家庭作业任务,要创建一个包含有关游览的数据的链接列表,并将数据写入二进制文件,然后读取它。但是当我编写一个函数来显示所有列表时,它不仅显示我创建的列表,而且还显示显示随机数据。

我尝试过使用不同的循环,但由于某种原因,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

最佳答案

您的主要问题就在这里。

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)

关于c - 程序从文件读取时显示随机列表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56207384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com