使用c程序修改文件中的记录

使用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

我编写了这个c程序来插入、查看、修改和删除文件中的记录。文件名为emp.dat。显示、添加和删除的代码工作正常,但修改部分不工作。程序要求输入要修改的详细信息,但未更新/修改任何内容。 代码:

#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)