c语言帮我修改一下,谢谢了,谢谢了。 30
#include<stdio.h>#include<stdlib.h>voidsave();voidresave();structzg{charname[10];intn...
#include<stdio.h>
#include<stdlib.h>
void save();
void resave();
struct zg
{
char name[10];
int no;
char sex;
int age;
char addr[20];
int money;
char stage[5];
}zg[2];
int main()
{
int i;
for(i=0;i<2;i++)
scanf("%s%d%c%d%s%d%s",zg[i].name,&zg[i].no,&zg[i].sex,&zg[i].age,zg[i].addr,&zg[i].money,zg[i].stage);
save();
resave();
getchar();
return 0;
}
void save()
{
int i;
FILE *p;
if((p=fopen("employee.dat","wb"))==NULL)
{
printf("不能打开文件");
return;
}
for(i=0;i<2;i++)
if(fwrite(&zg[i],sizeof(struct zg),1,p)!=1)
printf("file write error\n");
fclose(p);
}
void resave()
{ int i;
FILE *p1;
FILE *p2;
if((p1=fopen("employee.dat","r"))==NULL)
{ printf("不能打开文件");
return;
}
if((p2=fopen("employee2.dat","wb"))==NULL)
{ printf("不能打开文件");
return;
}
for(i=0;i<2;i++)
{
fread(&zg[i],sizeof(struct zg),1,p1);
printf("%s\n%s\n",zg[i].name,zg[i].no,zg[i].money);
fprintf(p2,"%s\n%s\n",zg[i].name,zg[i].no,zg[i].money);
}
fclose(p1);
fclose(p2);
} 展开
#include<stdlib.h>
void save();
void resave();
struct zg
{
char name[10];
int no;
char sex;
int age;
char addr[20];
int money;
char stage[5];
}zg[2];
int main()
{
int i;
for(i=0;i<2;i++)
scanf("%s%d%c%d%s%d%s",zg[i].name,&zg[i].no,&zg[i].sex,&zg[i].age,zg[i].addr,&zg[i].money,zg[i].stage);
save();
resave();
getchar();
return 0;
}
void save()
{
int i;
FILE *p;
if((p=fopen("employee.dat","wb"))==NULL)
{
printf("不能打开文件");
return;
}
for(i=0;i<2;i++)
if(fwrite(&zg[i],sizeof(struct zg),1,p)!=1)
printf("file write error\n");
fclose(p);
}
void resave()
{ int i;
FILE *p1;
FILE *p2;
if((p1=fopen("employee.dat","r"))==NULL)
{ printf("不能打开文件");
return;
}
if((p2=fopen("employee2.dat","wb"))==NULL)
{ printf("不能打开文件");
return;
}
for(i=0;i<2;i++)
{
fread(&zg[i],sizeof(struct zg),1,p1);
printf("%s\n%s\n",zg[i].name,zg[i].no,zg[i].money);
fprintf(p2,"%s\n%s\n",zg[i].name,zg[i].no,zg[i].money);
}
fclose(p1);
fclose(p2);
} 展开
展开全部
1、在你的resave函数中, printf("%s\n%s\n",zg[i].name,zg[i].no,zg[i].money); fprintf(p2,"%s\n%s\n",zg[i].name,zg[i].no,zg[i].money);都少了一个格式说明符%d(与zg[i].no对应),所以当以%s格式输出zg[i].no时,由于该值不是地址,所以报错,同理后面的%s也应该改成%d,即格式说明为"%s\n%d\n%d\n"。
2、在你的main函数中输入信息的时候scanf("%s%d%c%d%s%d%s"中的%c在使用的时候要小心,输入no的时候要和sex连在一起输入,即,在这里不能有空格,比如姓名为zhang编号为1001,性别为m,则年龄为22,,,则输入方式应该是 zhang 1001m 22 ,,,
2、在你的main函数中输入信息的时候scanf("%s%d%c%d%s%d%s"中的%c在使用的时候要小心,输入no的时候要和sex连在一起输入,即,在这里不能有空格,比如姓名为zhang编号为1001,性别为m,则年龄为22,,,则输入方式应该是 zhang 1001m 22 ,,,
追问
为什么要连在一起输呢?还是不对呀,输出屏幕的时候都乱了,出来好多零呀
追答
因为不连在一起输入,就会出现sex接收到的是空格的问题,我试过了,程序没问题了,如果按照我说的方式输入的话,屏幕显示以及文件中的内容是完全没问题的。
我不知道你的程序是怎么改的,要不你再把你修改后的完整程序贴上来看一下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询