gpt4 book ai didi

c - 更新一个文件记录

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:12 25 4
gpt4 key购买 nike

我正在尝试更新 C 中随机访问文件的记录。我只需要更新我的 .dat 文件的每条记录中的整数 cant_discos。

这是我写的代码,我有两个问题:

1) 我的代码只允许我编辑文件的第一条记录。

2) 程序不更新记录。

typedef struct{
int codigo;
char nombre[30];
char integrantes[100];
int cant_discos;
} t_bandas;

int main()
{
int res,cant;
t_bandas aux;
FILE * fd;
fd=fopen("bandas.dat","rb+");
if(fd==NULL){ puts("ERROR"); exit(-1)}

while(!feof(fd)){
res=fread(&aux,sizeof( t_bandas),1,fd);
if(res!=0){
printf("New cant value..\n");
scanf("%d",&cant);
aux.cant_discos=cant;
fwrite(&aux,sizeof( t_bandas),1,fd);
}
}
fclose(fd);
return 0; }

最佳答案

fseek 读写切换时调用

#include <stdio.h>
#include <stdlib.h>

typedef struct{
int codigo;
char nombre[30];
char integrantes[100];
int cant_discos;
} t_bandas;

int main()
{
int res,cant;
long pos = 0;
t_bandas aux;
FILE * fd;

fd=fopen("bandas.dat","rb+");
if(fd==NULL){
puts("ERROR");
exit(-1);
}

while ( ( res = fread ( &aux, 1, sizeof ( t_bandas), fd)) == sizeof ( t_bandas)) {
printf("New cant value..\n");
scanf("%d",&cant);
aux.cant_discos=cant;
fseek ( fd, pos, SEEK_SET);//seek to start of record
fwrite(&aux,sizeof( t_bandas),1,fd);
pos = ftell ( fd);//store end of record
fseek ( fd, 0, SEEK_CUR);//seek in-place to change from write to read
}
fclose(fd);
return 0;
}

关于c - 更新一个文件记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35447852/

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