gpt4 book ai didi

c - C 中的二进制文件读写

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

我正在尝试将结构与 C 中的二进制文件一起使用。我读入了人员结构的文件。每个人都有一个属性 is_a_winner, is_runner_up 如果 is_a_winner 为 true 我应该在奖品字段中添加 Gold,如果 is_runner_up 为 true,则添加 Silver,否则添加青铜。它适用于某些结构,但不适用于其他结构。我认为这可能与文件中“光标”的定位有关。

struct prizelist{
char name[10];
int is_a_winner;
int is_runner_up;
int age;
char prize[20];
};

void addPrize() {
FILE *fp;
if ((fp = fopen("prize.out", "rb+"))!=NULL) {
size_t itemSize = sizeof(struct prizelist);
struct prizelist item;
fread(&item,1,itemSize, fp);
while (!feof(fp)) {
if (item.is_a_winner) {
strcpy( item.prize, "Gold" );
} else if (item.is_runner_up) {
strcpy( item.prize, "Silver" );
} else {
strcpy( item.prize, "Bronze" );
}
fseek(fp, itemSize, SEEK_CUR);
fwrite(&item, itemSize, 1, fp);
fread(&item,1,itemSize, fp);
}
fclose(fp);
}
}

最佳答案

您所提供的代码可以归结为:

fread(&item,1,itemSize, fp);
while (!finished) {
fseek(fp, itemSize, SEEK_CUR);
fwrite(&item, itemSize, 1, fp);
fread(&item,1,itemSize, fp);

问题出在您的 fseek() 调用中;您正在从文件中当前 (SEEK_CUR) 位置向前进行相对查找,然后写入该文件...如果我理解您想要更新记录的意图你刚刚阅读,你寻找的方向是错误的。如果您的第一条记录是记录 0,则读取后您的位置位于记录 1,然后您寻求记录 2,然后写入。哎呀!相反,使用以下方式进行查找:fseek(fp, -itemSize, SEEK_CUR); 向后移动。

关于c - C 中的二进制文件读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13688832/

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