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

时间:2019-05-19 11:35:54

标签: c list binaryfiles

我有一个家庭作业任务,用有关游览的数据创建一个链表,然后将数据写入二进制文件中,然后读取它。但是当我编写一个显示所有列表的函数时,它会显示我创建的列表,但同时显示随机数据。

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

1 个答案:

答案 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)