使用c程序修改文件中的记录
我编写了这个c程序来插入、查看、修改和删除文件中的记录。文件名为emp.dat。显示、添加和删除的代码工作正常,但修改部分不工作。程序要求输入要修改的详细信息,但未更新/修改任何内容。 代码:使用c程序修改文件中的记录,c,file-handling,C,File Handling,我编写了这个c程序来插入、查看、修改和删除文件中的记录。文件名为emp.dat。显示、添加和删除的代码工作正常,但修改部分不工作。程序要求输入要修改的详细信息,但未更新/修改任何内容。 代码: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> void main() { FILE *outp,*inpt; char another,ch
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
void main()
{
FILE *outp,*inpt;
char another,choice;
struct emp
{
int emp_no,age;
char name[40];
float bs;
};
struct emp e;
char empname[40];
long int recsize;
outp=fopen("emp.dat","r+");
if(outp=='\0')
{
outp=fopen("emp.dat","w+");
if(outp=='\0')
{
puts("cannot open file\n");
exit(1);
}
}
recsize=sizeof(e);
while(1)
{
printf("1.Add records\n");
printf("2.List records\n");
printf("3.Modify records\n");
printf("4.Delete records\n");
printf("0. exit\n");
printf("Your choice\n");
fflush(stdin);
choice=getche();
switch(choice)
{
case '1': //code to add data
.
case '2': //code to display data
case '3': //code to modify data
another='Y';
while(another=='Y')
{
printf("\nEnter name of employee to modify");
scanf("%s",empname);
rewind(outp);
while(fread(&e,recsize,1,outp)==1)
{
if(strcmp(e.name,empname)==0)
{
printf("\nenter new name,age & gs");
scanf("%d %s %d %f",&e.emp_no,&e.name,&e.age,&e.bs);
fseek(outp,-recsize,SEEK_CUR);
fwrite(&e,recsize,1,outp);
break;
}
}
printf("\nModify another record(Y/N)");
fflush(stdin);
another=getche();
}
printf("\n\n");
break;
case '4': //code to delete data
case '0':
fclose(outp);
printf("\n\n");
exit(1);
}
}
}
#包括
#包括
#包括
#包括
void main()
{
文件*outp,*inpt;
另一方面,选择;
结构emp
{
国际环境管理局编号、年龄;
字符名[40];
浮动bs;
};
结构emp e;
字符名称[40];
长整型;
输出=fopen(“emp.dat”,“r+”);
如果(输出=='\0')
{
输出=fopen(“环境数据”,“w+”);
如果(输出=='\0')
{
puts(“无法打开文件\n”);
出口(1);
}
}
recsize=sizeof(e);
而(1)
{
printf(“1.Add记录\n”);
printf(“2.List记录\n”);
printf(“3.Modify records\n”);
printf(“4.Delete记录\n”);
printf(“0.exit\n”);
printf(“您的选择”);
fflush(stdin);
choice=getche();
开关(选择)
{
案例“1”://添加数据的代码
.
案例“2”://显示数据的代码
案例“3”://修改数据的代码
另一个“Y”;
而(另一个=='Y')
{
printf(“\n输入要修改的员工姓名”);
scanf(“%s”,empname);
倒带(输出);
while(fread&e,recsize,1,outp)==1)
{
if(strcmp(e.name,empname)==0)
{
printf(“\n输入新名称、年龄和性别”);
scanf(“%d%s%d%f”、&e.emp\u编号、&e.name、&e.age、&e.bs);
fseek(outp,-recsize,SEEK_CUR);
fwrite&e,recsize,1,outp);
打破
}
}
printf(“\N修改另一条记录(Y/N)”);
fflush(stdin);
另一个=getche();
}
printf(“\n\n”);
打破
案例“4”://删除数据的代码
案例“0”:
fclose(outp);
printf(“\n\n”);
出口(1);
}
}
}
从输出中可以看出,名称不会从Zaid更改为Cow,年龄和gs也不会更改。您确实应该测试返回值 提示要求输入
姓名、年龄和gs
,您可以按要求输入。但是,scanf
被指示首先获取一个整数(emp\u no
)(%d%s%d%f“
)。它会立即失败,并且不会更新任何内容
这种情况很容易察觉:
scanf
返回成功转换的次数。您已经发布了很多代码。如果您创建了一个最小的、完整的、可验证的示例,您可以增加有人阅读它并尝试帮助您的可能性。在此处阅读更多信息:此if(outp=='\0')
应该抛出警告,甚至是错误。如果(!outp)