c语言读取二进制文件,输出的全是0,求助
用户通过终端输入数据,保存在结构体中,然后结构体中的数据在以二进制保存到stud文件中
然后在读取二进制文件的数据到另一个结构体中,并打印到终端上。
但是打印出来的结果全部都是0,
求解答。。。。感谢
#include<stdio.h>
#include<stdlib.h>
#define MAX 128
struct Student
{
int num;
char name[10];
int score[3];
int average;
};
struct Student ins_buf_stu[MAX];
struct Student vie_buf_stu[MAX];
int main(void)
{
void insert(void);
void view(void);
insert();
view();
return 0;
}
int get_size(FILE *fp)
{
fseek(fp, 0L, SEEK_END);
int size = ftell(fp);
fclose(fp);
return size;
}
void view(void)
{
int get_size(FILE *);
FILE *fp;
if ((fp = fopen("stud", "rb")) == NULL)
{
printf("can not open the file\n");
exit(0);
}
int n_stu;
int i,j;
n_stu = get_size(fp) / sizeof(struct Student);
for (i=0; i<n_stu; i++)
{
fseek(fp, i * sizeof(struct Student), 0);
fread(&vie_buf_stu[i], sizeof(struct Student), 1, fp);
printf("%d\t%s\t", vie_buf_stu[i].num, vie_buf_stu[i].name);
for (j=0; j<3; j++)
{
printf("%d\t", vie_buf_stu[i].score[j]);
}
printf("\n");
}
fclose(fp);
}
void insert(void)
{
int n_stu = 0;
float sum = 0.0;
int i,j;
FILE *fp;
if ((fp = fopen("stud", "ab")) == NULL)
{
printf("can not open the file\n");
exit(0);
}
printf("insert how many student?\n");
scanf("%d",&n_stu);
for (i=0; i<n_stu; i++)
{
printf("num of Student %d\n", i+1);
scanf("%d", &ins_buf_stu[i].num);
printf("name of Student %d\n", i+1);
scanf("%s", ins_buf_stu[i].name);
for (j=0; j<3; j++)
{
printf("score %d of Student %d\n", j+1, i+1);
scanf("%d", &ins_buf_stu[i].score[j]);
sum += ins_buf_stu[i].score[j];
}
ins_buf_stu[i].average = sum / 3;
}
for (i=0; i<n_stu; i++)
{
if (fwrite (&ins_buf_stu[i], sizeof(struct Student), 1, fp) != 1)
{
printf("err\n");
}
}
fclose(fp);
}
你得get_size函数把文件关闭了,所以文件句柄已经非法了,去掉你得fclose