gpt4 book ai didi

c - 在 C 中编辑/修改和删除随机访问文件中的记录

转载 作者:太空狗 更新时间:2023-10-29 16:13:25 26 4
gpt4 key购买 nike

程序应该根据员工id修改或删除特定记录,在修改部分将修改后的记录作为新记录写入文件末尾,删除部分只工作一次然后给我一个段错误。

修改:

如何修改代码,将编辑过的记录重写在同一位置?

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

struct record_em{
int id;
char name[20];
int salary;
int age;
};

int main( void )
{
struct record_em employee;
FILE *fp;
int n;
int ch;
fp = fopen("empRecord.dat","rb+");

printf("Enter Id Number:\n");
scanf("%d",&n);
rewind(fp);
while (!feof(fp)){

fscanf(fp,"%d %s %d %d", &employee.id, employee.name, &employee.salary, &employee.age);

if (employee.id==n){
printf("%d %s %d %d \n",employee.id, employee.name, employee.salary,employee.age);
printf("\n Do you want to change the name ?\n");
scanf("%d",&ch);

if (ch==1){
printf("Enter new name:\n");
scanf("%s",employee.name);
}
printf("\n Do you want to change the salary ?(y/n)\n");
scanf("%d",&ch);

if ( ch==2 ){
printf("Enter new salary:\n");
scanf("%d",&employee.salary);
}
printf("\n Do you want to change the age ?(y/n)\n");
scanf("%d",&ch);

if ( ch==3 ){
printf("Enter new age:\n");
scanf("%d",&employee.age);
}
fseek(fp,-sizeof(employee),SEEK_CUR);
fprintf(fp, "%d %s %d %d\n", employee.id, employee.name, employee.salary, employee.age);
exit(0);
}
}
printf("Record Not Found \n");
return 0;
}

删除:

我如何修改代码以使其根据需要多次删除记录?

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

struct record_em{
int id;
char name[20];
int salary;
int age;
};

int main()
{
struct record_em employee;
FILE *fp, *ft;
int n;
fp = fopen("empRecord.dat","r");
ft = fopen("Temp.dat","wb+");

printf("\nEnter ID of employee to delete ");

scanf("%d",&n);
rewind(fp);
while (!feof(fp)){
fscanf(fp,"%d %s %d %d", &employee.id, employee.name, &employee.salary, &employee.age);

if(employee.id!=n){
fprintf(ft, "%d %s %d %d\n", employee.id, employee.name, employee.salary, employee.age);
}
}

fclose(fp);
fclose(ft);
remove("empRecord.dat");
rename("Temp.dat","EempRecord.dat");

return 0;
}

最佳答案

这里是代码的关键点:

void update(char filename[],char name[])
{
int records=0;
FILE *fp = fopen(filename,"rb+");
while(fread(&st,sizeof(st),1,fp)==1)
{
if(strcmp(name,st.name)==0)
{
printf("\nEnter new name: ");
scanf("%s",st.name);
printf("\nEnter new roll no.: ");
scanf("%d",&st.roll);
fseek(fp,sizeof(struct student)*records,SEEK_SET);//This is key line..
fwrite(&st,sizeof(st),1,fp);
}
records++; // in the while loop...
}
fclose(fp);
}

下面是student的结构:

struct student{
int roll;
char name[20];
}st;

这是修改/更新记录的一般方法。您可以对员工结构使用相同的语法。

关于c - 在 C 中编辑/修改和删除随机访问文件中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13540193/

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