m0_59053346 2021-06-14 09:02 采纳率: 100%
浏览 26
已采纳

这部分代码有什么问题,(急急急),求大神们帮帮忙吧!

void gx()

{    

FILE *p; 

struct st s[N]; 

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");
}

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");

}

 

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-06-14 11:19
    关注

    修改如下,供参考:

    void gx()
    {
        FILE *p;
        struct st s[N];
        int i=0,c,flag,n;
        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);
        n=i;   //这里将文件里读入的记录条数赋值给 n
    
        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;
                     scanf("%d",&zj);
                     getchar();
                     for(i=n; i<n+zj; i++){
    
                          printf("请输入第%d人的信息:\n",i-n+1);
                          printf("请输入工号:\n");
                          fflush(stdout);rewind(stdin);
                          scanf("%s",s[i].num);
                          printf("请输入姓名:\n");
                          fflush(stdout);rewind(stdin);
                          scanf("%s",s[i].name);
                          printf("请输入年龄:\n");
                          fflush(stdout);rewind(stdin);
                          scanf("%s",s[i].age);
                          //getchar();
                          printf("请输入职位:\n");
                          fflush(stdout);rewind(stdin);
                          scanf("%s",s[i].work);
                          printf("请输入性别:\n");
                          fflush(stdout);rewind(stdin);
                          scanf("%s",s[i].sex);
                          printf("请输入地址:\n");
                          fflush(stdout);rewind(stdin);
                          scanf("%s",s[i].add);
                          printf("请输入电话:\n");
                          fflush(stdout);rewind(stdin);
                          scanf("%s",s[i].phone);
                          printf("请输入入职时间(年月日):");
                          fflush(stdout);rewind(stdin);
                          scanf("%s%s%s",s[i].hiredate.year,s[i].hiredate.month,s[i].hiredate.day);
                     }
                     n=n+zj;
                     printf("追加成功 按回车继续······");
                     getchar();
                     break;
              case 2:
                     int sc,j,k;
                     char gh[13];
                     printf("请输入删除员工人数:");
                     fflush(stdout);rewind(stdin);
                     scanf("%d",&sc);
    		 for(i=0; i<sc; i++){
                          flag=0;
                          printf("请输入第%d个删除的员工工号:",i+1);
                          fflush(stdout);rewind(stdin);
                          scanf("%s",gh);                   //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-1; k++){
    					  s[k]=s[k+1];
                                        }
                                        n=n-1;
                                  }
                              }
                          }
                          if(flag==0){
                               printf("查无此人 请选择下一个!\n按回车继续······");
                               getchar();
                          }
                     }
                     printf("删除成功 按回车继续······");
                     getchar();
                     break;
              case 3:
                     flag=0;
                     char gh1[13];
                     printf("请输入要修改员工的工号:");
                     fflush(stdout);rewind(stdin);
                     scanf("%s",gh1);   //scanf("%s",&gh1);
                     for(i=0; i<n; i++) {
                          if(strcmp(gh1,s[i].num)==0){
                               flag=1;
                               printf("请输入工号:\n");
                               fflush(stdout);rewind(stdin);
                               scanf("%s",s[i].num);
                               printf("请输入姓名:\n");
                               fflush(stdout);rewind(stdin);
                               scanf("%s",s[i].name);
                               printf("请输入年龄:\n");
                               fflush(stdout);rewind(stdin);
                               scanf("%s",s[i].age);
                               printf("请输入职位:\n");
                               fflush(stdout);rewind(stdin);
                               scanf("%s",s[i].work);
                          }
                     }
                     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();
                     break;
             default:
                     printf("输入出错 请重新输入!!\n按回车继续······");
                     break;
        }
        //goto over;
        //system("pause");
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler