请教(急)
题目:设有一个单位的人员工资有如下信息:name、department、 base pay、allowance、total 。现从键盘输入一组人员工资数据并将它们存储到名为paydata的文件中; 再从paydata取出工资数据并给每个人的base pay增加100元,增加后将工资数据显示于屏幕(每行1人)。 请编写能够完成上述工作的程序。
我的解决方案:
/*experiment-2*/ #include<stdio.h> main() {struct people {char name[3]; char department[3]; float basepay; float allowance; float totle; }p[2],m[2]; int i; FILE *fp; fp=fopen("c:\paydata","w"); if((fp=fopen("c:/person","w"))==NULL) { printf("cannot open the file\n"); exit(0); } printf("now we start inputing the information:name:3 words,department:3, basepay:float,allowance:float,totle:float\n"); printf("this time we input 2 persons' information\n");
for(i=0;i<2;i++) {scanf("%s,%s,%f,%f",p[i].name,p[i].department,&p[i].basepay,&p[i].allowance); p[i].totle=p[i].allowance+p[i].basepay; }
for(i=0;i<2;i++) fwrite(&p[i],sizeof(struct people),1,fp); fclose(fp); fp=fopen("paydata","r"); for(i=0;i<2;i++) {fread(&m[i],sizeof(struct people),1,fp); m[i].basepay=m[i].basepay+100; m[i].totle=m[i].totle+100; } for(i=0;i<2;i++) {printf("%s,%s,%f,%f,%f",m[i].name,m[i].department,m[i].basepay,m[i].allowance,m[i].totle); printf("\n"); } fclose(fp); } 这里姑且不看结构化的问题。此程序调试时没有语法错误只有逻辑错误,请各位帮忙看一下为什么。
更让我百思不得其解的是:我的一位朋友用几乎完全一样的代码却解决了问题,其代码如下:#include<stdio.h> #define number 2 struct person { char name[20]; char dptm[20]; int basepay; int allowance; int total; }ps[number]; void save() { int i; FILE *fp; if((fp=fopen("c:/person","wb"))==NULL) { printf("cannot open the file\n"); exit(0); } for(i=0;i<2;i++) { ps[i].total=ps[i].basepay+ps[i].allowance; fwrite(&ps[i],sizeof(struct person),1,fp); } close(fp); } void browse() { int i; FILE *fp=fopen("c:/person","rb"); printf("students' information:\n"); for(i=0;i<number;i++) { fread(&ps[i],sizeof(struct person),1,fp); ps[i].basepay=ps[i].basepay+100; ps[i].total=ps[i].total+100; printf("%s %s %d %d %d\n",ps[i].name,ps[i].dptm,ps[i].basepay, ps[i].allowance,ps[i].total); } close(fp);
} void main() { int i; printf("please input the information ofthe students:\n"); for(i=0;i<number;i++) { scanf("%s %s %d %d",ps[i].name,ps[i].dptm,&ps[i].basepay,&ps[i].allowance); } save(); browse(); } 请各位看一下这两个程序有什么不同,为什么他的可以实现,我的就不行。另外请教文件操作的真知灼见,因为这一点 常常让我感到很头疼。
期待各位的回复!!!!!!!!!!!! 注:我想知道为什么文件写不进去或者写进去了但输出的结果不合适
。