c语言可以运行但是更新模块运行时出现“未经处理的异常”“发生访问冲突”

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define N 300

struct date

{

char year[6];

char month[4];

char day[4];

};

struct st

{

char num[13];

char name[15];

    int age;

    char work[20];

char sex[6];

    char add[30];

    char phone[20];

struct date hiredate;

};

void lr()

{

FILE *p;

struct st s1;

char ans='y';

p=fopen("staff.dat","a");

if(p==NULL)

{

printf("file open error!\n");

exit(-1);

}

while(ans=='y'||ans=='Y')

{

printf("请输入工号:");

scanf("%s",s1.num);

printf("请输入姓名:");

scanf("%s",s1.name);

printf("请输入年龄:");

scanf("%d",&s1.age);

printf("请输入性别:");

scanf("%s",s1.sex);

printf("请输入工作:");

scanf("%s",s1.work);

printf("请输入地址:");

scanf("%s",s1.add);

printf("请输入电话:");

scanf("%s",s1.phone);

printf("请输入入职时间(年月日):");

scanf("%s%s%s",s1.hiredate.year,s1.hiredate.month,s1.hiredate.day);

fwrite(&s1,sizeof(struct st),1,p);

    getchar();

printf("继续输入吗?(y/n)");

scanf("%c",&ans);

}

fclose(p);

}

void gx()

{

    FILE *p;

struct st s[N];

int i=0,c,flag;

p=fopen("staff.dat","rb");

    if(p==NULL) 

{

printf("文件不存在!\n");

exit(-1);

}

while(fread(&s[i], sizeof(struct st),1,p)==1)

{

i++;

}

fclose(p);

over:

system("cls");

printf("请选择功能:\n");

printf("**----------------按1:追加员工信息-----------------**\n");

printf("**----------------按2:删除员工信息-----------------**\n");

printf("**----------------按3:修改员工信息-----------------**\n");

printf("**-----------------按0:返回主菜单------------------**\n");

fflush(stdout);rewind(stdin);

scanf("%d",&c);

switch(c)

{

case 1:

flag=0;

printf("请输入追加员工人数:");

int zj,n;

scanf("%d",&zj);

getchar();

for(i=n; i<n+zj; i++)

{

printf("请输入第%d人的信息:\n",i-n+1);

printf("请输入工号:\n");

scanf("%s",s[i].num);

printf("请输入姓名:\n");

scanf("%s",s[i].name);

printf("请输入年龄:\n");

scanf("%s",s[i].age);

//getchar();

printf("请输入职位:\n");

scanf("%s",s[i].work);

printf("请输入性别:\n");

scanf("%s",s[i].sex);

printf("请输入地址:\n");

scanf("%s",s[i].add);

printf("请输入电话:\n");

scanf("%s",s[i].phone);

printf("请输入入职时间(年月日):");

        scanf("%s%s%s",s[i].hiredate.year,s[i].hiredate.month,s[i].hiredate.day);

}

n=n+zj;

printf("追加成功 按回车继续······");

getchar();

break;

case 2:

flag=0;

printf("请输入删除员工人数:");

int sc,j,k;

scanf("%d",&sc);

getchar();

char gh[13];

for(i=0; i<sc; i++)

{

printf("请输入删除的员工工号:");

scanf("%d",&gh);

for(j=0; j<n; j++)

{

if(strcmp(gh,s[j].num)==0)

{

if(j==n-1)

{

flag=1;

n=n-1;

}

else

{

flag=1;

for(k=j; k<n; k++)

{

s[k]=s[k+1];

}

n=n-1;

}

}

}

}

if(flag==0)

{

printf("查无此人 请重新选择!\n按回车继续······");

getchar();

getchar();

goto over;

}

printf("删除成功 按回车继续······");

getchar();

break;

case 3:

flag=0;

printf("请输入要修改员工的工号:");

char gh1[13];

getchar();

scanf("%s",&gh1);

for(i=0; i<n; i++)

{

if(strcmp(gh1,s[i].num)==0)

{

printf("请输入工号:\n");

scanf("%s",s[i].num);

printf("请输入姓名:\n");

scanf("%s",s[i].name);

printf("请输入年龄:\n");

scanf("%s",s[i].age);

getchar();

printf("请输入职位:\n");

scanf("%s",s[i].work);

printf("请输入性别:\n");

scanf("%s",s[i].sex);

printf("请输入地址:\n");

scanf("%s",s[i].add);

printf("请输入电话:\n");

scanf("%s",s[i].phone);

printf("请输入入职时间(年月日):");

            scanf("%s%s%s",s[i].hiredate.year,s[i].hiredate.month,s[i].hiredate.day);

flag=1;

}

}

if(flag==0)

{

printf("查无此人 请重新选择!\n按回车继续······");

getchar();

}

break;

case 0:

FILE *fp;

printf("正在保存至staff.dat");

 

if((fp=fopen("staff.dat", "wb"))==NULL)

{

printf("文件无法打开...\n");

}

fwrite(s, sizeof(struct st),n,p);

fclose(fp);

printf("数据成功写入文件...\n");

printf("请按回车键继续······");

getchar();

default:

printf("输入出错 请重新输入!!\n按回车继续······");

}

goto over;

system("pause");

}

void cx()

{

FILE *p;

    struct st s[N];

    char num[13];

    char name[15];

    char phone[20];

    int i,w,c,n=0,m=1;

    p=fopen("staff.dat","rb");

    if(p==NULL) 

{

       printf("file open error.\n");

       exit(-1);

    }

    while(fread(&s[n],sizeof(struct st),1,p)==1)

n++;

    fclose(p);

  

       do{

  system("cls");

          printf("\n");

          printf("****************************************************\n");

          printf("**-----------------按1 按工号查询-----------------**\n");

          printf("**-----------------按2 按姓名查询-----------------**\n");

          printf("**-----------------按3 按电话查询-----------------**\n");

          printf("**-----------------按0  退出系统 -----------------**\n");

          printf("****************************************************\n");

          printf("\n请输入你的选择:");

          fflush(stdout);rewind(stdin);

          scanf("%d",&c);

          switch(c)

  {

                     case 1:

                            printf("\n请输入要查询的员工工号:");

                            fflush(stdout);rewind(stdin);

                            scanf("%s",num);

                            for(i=0;i<n;i++) 

{

                                if(strcmp(num,s[i].num)==0) break;

                            }

                            if(i>=n) 

{

                                printf("\n不存在该工号!\n");

                            

}

else

{

                                printf("\n按工号查询:\n");

                    printf("\n---------------------------------------------员工信息-----------------------------------------------------\n");

                printf("工号\t姓名\t年龄\t性别\t工作\t地址\t\t电话\t\t\t入职时间\n");

                printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t%s.%s.%s\n",s[i].num,s[i].name,s[i].age,s[i].sex,s[i].work,s[i].add,s[i].phone,s[i].hiredate.year,s[i].hiredate.month,s[i].hiredate.day);

printf("----------------------------------------------------------------------------------------------------------\n");

                            }

                            

                            system("pause");

                            break;

                     case 2:

                            printf("\n请输入要查询的员工姓名:");

                            fflush(stdout);rewind(stdin);

                            scanf("%s",name);

                            for(i=0;i<n;i++) 

{

                                if(strcmp(name,s[i].name)==0) break;

                            }

                            if(i>=n)

{

                                printf("\n不存在该姓名!\n"); 

}

                            else 

{

                                printf("\n按姓名查询:\n");

    printf("\n---------------------------------------------员工信息-----------------------------------------------------\n");

printf("工号\t姓名\t年龄\t性别\t工作\t地址\t\t电话\t\t\t入职时间\n");

printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t%s.%s.%s\n",s[i].num,s[i].name,s[i].age,s[i].sex,s[i].work,s[i].add,s[i].phone,s[i].hiredate.year,s[i].hiredate.month,s[i].hiredate.day);

printf("----------------------------------------------------------------------------------------------------------\n");

                            }

                           

                            system("pause");

                            break;

                     case 3:

                            printf("\n请输入要查询的员工电话:");

  fflush(stdout);rewind(stdin);

                            scanf("%s",phone);

                            for(i=0;i<n;i++)

{

                                if(strcmp(phone,s[i].phone)==0) break;

                            }

                            if(i>=n) 

{

                                printf("\n不存在该电话!\n");

                            

}

else 

{

                               printf("\n按电话查询:\n");

printf("\n---------------------------------------------员工信息-----------------------------------------------------\n");

printf("工号\t姓名\t年龄\t性别\t工作\t地址\t\t电话\t\t\t入职时间\n");

printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t%s.%s.%s\n",s[i].num,s[i].name,s[i].age,s[i].sex,s[i].work,s[i].add,s[i].phone,s[i].hiredate.year,s[i].hiredate.month,s[i].hiredate.day);

printf("----------------------------------------------------------------------------------------------------------\n");

                            }

                            

                            system("pause");

                            break;

case 0:

                return;

                    default:

                printf("输入有误 请重新输入!\n");

                getchar();

          }

       }while(c!=0);

  

}

void pl()

{

system("cls");

struct st s[N],t;

FILE *p;

int i,j,n=0;

p=fopen("staff.dat","r");

if(p==NULL)

{

printf("file open error.\n");

exit(-1);

}

while(fread(&s[n],sizeof(struct st),1,p)==1)

n++;

fclose(p);

for(i=0;i<n-1;i++)

for(j=0;j<n-1;j++)

{

if(s[j].age>s[i+1].age)

{

t=s[j];

s[j]=s[j+1];

s[j+1]=t;

}

}

printf("\n按照年龄从小到大排序:\n");

printf("\n---------------------------------------------员工信息-----------------------------------------------------\n");

printf("工号\t姓名\t年龄\t性别\t工作\t地址\t\t电话\t\t\t入职时间\n");

for(i=0;i<n;i++)

printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t%s.%s.%s\n",s[i].num,s[i].name,s[i].age,s[i].sex,s[i].work,s[i].add,s[i].phone,s[i].hiredate.year,s[i].hiredate.month,s[i].hiredate.day);

printf("----------------------------------------------------------------------------------------------------------\n");

system("pause");

}

void tj()

{

FILE *fp;

struct st s[N];

int i=0,choice,flag;

if((fp=fopen("staff.dat", "rb"))==NULL)

{

printf("文件不存在!\n");

}

while(fread(&s[i], sizeof(struct st),1,fp))

{

i++;

}

fclose(fp);

int a;

char sex[6],work[20];

sa:

system("cls");

printf("***********************************************************\n");

printf("**-----------------按1:按照员工年龄统计-----------------**\n");

printf("**-----------------按2:按照员工性别统计-----------------**\n");

printf("**-----------------按3:按照员工工作统计-----------------**\n");

printf("**-----------------按0:   退出统计     -----------------**\n");

printf("***********************************************************\n");

printf("\n请输入你的选择:");

scanf("%d",&a);

getchar();

switch(a)

{

case 1:

flag=0;

int sui;

printf("\n请输入要统计的员工年龄:");

scanf("%d",&sui);

getchar();

int n;

for(int n=0; n<i; n++)

{

if(s[n].age==sui)

{

flag++;

if(flag==1)

{

printf("\n---------------------------------------------员工信息-----------------------------------------------------\n");

printf("工号\t姓名\t年龄\t性别\t工作\t地址\t\t电话\t\t\t入职时间\n");

}

printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t%s.%s.%s\n",s[n].num,s[n].name,s[n].age,s[n].sex,s[n].work,s[n].add,s[n].phone,s[n].hiredate.year,s[n].hiredate.month,s[n].hiredate.day);

}

}

printf("----------------------------------------------------------------------------------------------------------\n");

if(flag==0)

{

printf("\n统计方式无对应人员信息\n");

}

printf("\n按回车键继续");

getchar();

break;

case 2:

flag=0;

printf("\n请输入要统计的员工性别:");

gets(sex);

for(int n=0; n<i; n++)

{

if(strcmp(sex,s[n].sex)==0)

{

flag++;

if(flag==1)

{

printf("\n---------------------------------------------员工信息-----------------------------------------------------\n");

printf("工号\t姓名\t年龄\t性别\t工作\t地址\t\t电话\t\t\t入职时间\n");

}

printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t%s.%s.%s\n",s[n].num,s[n].name,s[n].age,s[n].sex,s[n].work,s[n].add,s[n].phone,s[n].hiredate.year,s[n].hiredate.month,s[n].hiredate.day);

}

}

printf("----------------------------------------------------------------------------------------------------------\n");

if(flag==0)

{

printf("\n统计方式无对应人员信息\n");

}

printf("\n按回车键继续");

getchar();

break;

case 3:

flag=0;

printf("\n请输入要统计的员工工作:");

 

gets(work);

for(int n=0; n<i; n++)

{

if(strcmp(work,s[n].work)==0)

{

flag++;

if(flag==1)

{

printf("\n---------------------------------------------员工信息-----------------------------------------------------\n");

printf("工号\t姓名\t年龄\t性别\t工作\t地址\t\t电话\t\t\t入职时间\n");

}

printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t%s.%s.%s\n",s[n].num,s[n].name,s[n].age,s[n].sex,s[n].work,s[n].add,s[n].phone,s[n].hiredate.year,s[n].hiredate.month,s[n].hiredate.day);

}

}

printf("----------------------------------------------------------------------------------------------------------\n");

if(flag==0)

{

printf("\n统计方式无对应人员信息\n");

}

printf("\n按回车键继续");

getchar();

break;

case 0:

return;

default:

printf("输入有误 请重新输入!\n按回车键继续");

getchar();

}

goto sa;

system("pause");

}

void sc()

{

system("cls");

FILE *p;

   struct st s1;

   p=fopen("staff.dat","r");

if(p==NULL)

{

printf("file open error.\n");

exit(-1);

}

printf("\n---------------------------------------------员工信息-----------------------------------------------------\n");

printf("工号\t姓名\t年龄\t性别\t工作\t地址\t\t电话\t\t\t入职时间\n");

while(fread(&s1, sizeof(struct st),1, p)==1)

printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t %s.%s.%s\n",s1.num,s1.name,s1.age,s1.sex,s1.work,s1.add,s1.phone,s1.hiredate.year,s1.hiredate.month,s1.hiredate.day);

printf("----------------------------------------------------------------------------------------------------------\n");

printf("\n");

fclose(p);

system("pause");

 

}

int main()

{

system("color F0");

int choice;

printf("\n");

while(1)

{

system("cls");

printf("*************************************************************\n");

printf("**------------------欢迎进入企业员工管理系统---------------**\n");

printf("**--------------------按1,录入员工信息--------------------**\n");

printf("**--------------------按2,更新员工信息--------------------**\n");

printf("**--------------------按3,查询员工信息--------------------**\n");

printf("**--------------------按4,排列员工信息--------------------**\n");

printf("**--------------------按5,统计员工信息--------------------**\n");

printf("**--------------------按6,输出员工信息--------------------**\n");

printf("**--------------------按0,退出系统------------------------**\n");

printf("**----------------------------------制作者:食品2003班3组--**\n");

printf("*************************************************************\n");

printf("\n请输入你的选项:");

scanf("%d",&choice);

switch(choice)

{

case 0:printf("\n运行结束,谢谢使用!\n");system("pause");return 0;

case 1:lr();break;

case 2:gx();break;

case 3:cx();break;

case 4:pl();break;

case 5:tj();break;

case 6:sc();break;

default:printf("\n输入错误,请重新选择!\n");

system("pause");

}

}

system("pause");

return 0;

}

int zj,n;

scanf("%d",&zj);

getchar();

for(i=n; i<n+zj; i++)

===在你更新函数中,并没有给n输入值啊, 就开始循环了,崩溃是必然的

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps: 问答会员【8折】购 ,仅需→¥23.2,即可享受5次/月 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m