今天写数据结构作业的时候用到结构体的二进制读写,之前也一直没弄透,然后今天就花点时间弄弄
然后突然发现个蛋疼的问题,,,
当以二进制的方式写如文本后,然后用二进制方式读的时候发现神马都读取不了!!
google百度加查书了一番,发现是输入字符串的时候最后是以'\n'还是'\0'结束问题。
然后加上
rewind() 一切便好了。。。如下面代码所示。
但是还是不是很明白为什么,我分别用了两个文件指针,一个读(*out),一个写(*in),为什么要把rewind()加上去才可以呢???
我试过把out指向了文件的第一位也读取不了。请教下各位。
小弟用的编译器是gcc。
-
-
-
#include<stdio.h>
-
#include<stdlib.h>
-
typedef struct s
-
{
-
char name[10];
-
char dp[10];
-
int base_pay;
-
int allowance;
-
int total;
-
}Staff;
-
-
void main()
-
{
-
int number,i=1;
-
printf("how many number you enter?:\n");
-
scanf("%d",&number);
-
Staff staff,*temp;
-
FILE *in,*out;
-
in=fopen("./paydate","wb");
-
for(i=1;i<=number;i++)
-
{
-
printf("Enter no.%d information:\n name,department,base pay,allowance,total\n",i);
-
scanf("%s%s%d%d%d",staff.name,staff.dp,&staff.base_pay,&staff.allowance,&staff.total);
-
temp=(Staff*)malloc(sizeof(Staff));
-
fwrite(&staff,sizeof(Staff),1,in);
-
}
-
close(in);
-
-
out=fopen("./paydate","rb");
-
-
-
rewind(in); /////////// bug !!!! 注意这里
-
-
-
-
for(i=0;i<number;i++)
-
{
-
fread(temp,sizeof(Staff),1,out);
-
printf("name:%s ",temp->name);
-
printf("dp:%s ",temp->dp);
-
printf("base_pay:%d ",temp->base_pay+100);
-
printf("allowance:%d ",temp->allowance);
-
printf("total%d ",temp->total);
-
printf("\n");
-
}
-
close(out);
-
}
阅读(753) | 评论(0) | 转发(0) |