gpt4 book ai didi

c - 请帮助将结构写入二进制文件

转载 作者:行者123 更新时间:2023-11-30 21:44:12 24 4
gpt4 key购买 nike

我是 C 语言的新手。我正在尝试创建一个 C 程序作为练习的简单票证系统。

我想将结构写入二进制文件然后读取它。但它没有将任何内容写入二进制文件。

我得到的只是

File successfully closed.

File successfully closed.

二进制文件 (ticket.bin) 仍然是空的。

如果有人可以输入一个示例来帮助我理解如何将结构写入二进制文件并读取它。

define STATIONNUM 10//Maximun number of station.

define rate1 160

define rate2 190

define rate3 230

struct Ticket{

int code;//code of the list
char station[20];//destination name.
int price;//transportation fee.
};



int main(){

FILE *fp;
int c;//for open close judgement return value.
int i;//use at for loop.

struct Ticket list[STATIONNUM]={
{1, "NewYork", rate1},
{2, "London", rate1},
{3, "Paris", rate1},
{4, "Tokyo", rate1},
{5, "HongKong ", rate2},
{6, "Sydney", rate2},
{7, "Milan", rate2},
{8, "Berlin", rate2},
{9, "Vancouver", rate3},
{10, "Afghanistan", rate3},
};

//open a binary file to write.
fp = fopen("ticket.bin", "wb");
if(! fp){
printf("open file fail");
}

//write data into binary file.
if (fwrite(list, sizeof(list[0]), STATIONNUM, fp) != STATIONNUM);

//close it.
c = fclose(fp);

//judge if it's closed.
if(c == -1){
printf("File close failed.\n");
}else if(c == 0){
printf("File successfully closed.\n");
}

//open binary file to read.
fp = fopen("ticket.bin", "rb");
if(! fp){
printf("open file fail");
}

fread(list, sizeof(struct Ticket), STATIONNUM, fp);

//close it.
c = fclose(fp);

//judge if it's closed.
if(c == -1){
printf("File close failed.\n");
}else if(c == 0){
printf("File successfully closed.\n");
}

}

最佳答案

你的线路

if (fwrite(list, sizeof(list[0]), STATIONNUM, fp) != STATIONNUM);

至少应该

if (fwrite(list, sizeof(struct Ticket), 
STATIONNUM, fp) != STATIONNUM)
{ perror("fwrite"); exit(EXIT_FAILURE); };

然后您可以考虑执行if (fflush(fp)) perror("fflush");

你显然忘记了

if fread(list, sizeof(struct Ticket), 
STATIONNUM, fp) != STATIONNUM)
{ perror("fread"); exit(EXIT_FAILURE); };

成功执行 fp = fopen("ticket.bin", "rb"); 行后。

您在测试每个库调用时都是正确的,例如 fopenfread 但失败时,您应该使用 perror 显示错误原因(或使用strerror(errno))。

你的代码

 fprintf(fp, "%d\t%s\t%d\n", 
list[i].code, list[i].station, list[i].price);

没有任何意义。 (您应该测试 fprintf 的结果是否为 3,否则 perror)。您正在为二进制读取而打开的 fp 句柄中打印文本!也许您只需要 printf 在这里。

顺便说一句,调用 list 一个实际上是数组的变量是完全令人困惑的......

关于c - 请帮助将结构写入二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19086455/

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