为什么无法从文件中读取正确的信息?Orz求大神(任务5)

/*2.定义一个结构体变量struct student, 4个成员,学号,姓名,科目和成绩 (两个结合成一个成员),还有一个本结构体的指针

任务一: 在main函数中定义一个struct student结构体数组,其长度为5

任务2: 编写一个函数用于从键盘上输入5个学生信息

任务3: 编写函数将第二题的结构体数组中的5个学生的信息用动态分配内存的方式组成一个单链表

再编写一个函数输出到桌面。

任务4: 将第3题中的单链表的5个节点依次存入文件file

任务五: 从第四题中文件file.txt读取第1,3,5个节点界面输出并存入文件file2.txt*/

#include <stdio.h>

#include <stdlib.h>

#define N 5//可以改的数

#define LEN sizeof(struct Student) //长度为结构体的长度

struct Student

{

char num;

char name[10];

char sub[10];

int score;

struct Student *next;

};

void inputandoutput(struct Student stu[])//输入数组和打印出来

{

int i;

for(i=0;i<N;i++)

{

scanf("%c %s %s %d",&stu[i].num,stu[i].name,stu[i].sub,&stu[i].score);

stu[i].next=NULL;

getchar();

}

for(i=0;i<N;i++)

{

printf("No.%c %s %s %d\n",stu[i].num,stu[i].name,stu[i].sub,stu[i].score);

}

}

void line(struct Student stu[])//动态链表

{

struct Student *p1,*p2;

int i;

FILE *fp;

p1=p2=(struct Student *)malloc(LEN);//给指针分配空间

for(i=1;i<=N;i++)

{

if(i==1) p1=stu;

else p2->next=p1;

p2=p1;

p1=(struct Student *)malloc(LEN);

p1=&stu[i];


}

printf("现在输出链表:\n");//输出动态链表

p1=stu;

for(i=0;i<N;i++)

{

printf("No.%c %s %s %d\n",p1->num,p1->name,p1->sub,p1->score);

p1=p1->next;

}

p1=stu;//和输出列表相似,把列表通过fprintf打入到文件中

if((fp=fopen("flim.txt","wt"))==NULL)

{

printf("eorre\n");

exit(0);

}

while(p1)

{

fprintf(fp,"%c %s %s %d\n",p1->num,p1->name,p1->sub,p1->score);//指针,格式,变量//这里用了fprintf也可以用fwrite输入

p1=p1->next;//下一个

}

fprintf(fp,"\n");

fclose(fp);

}

void read(struct Student stu[])

{

FILE *fp,*fp2;

int i,n;

struct Student stu2[N]={'\0'};

if((fp=fopen("flim.txt","rb"))==NULL)

{

printf("error\n");

exit(0);

}

for(i=0;i<N;i+=2)

{

fseek(fp,i*sizeof(stu[i]),0);

fread(&stu2[i],sizeof(struct Student),1,fp);

printf("No.%c %s %s %d\n",stu2[i].num,stu2[i].name,stu2[i].sub,stu2[i].score);

}

if((fp2=fopen("film2.txt","wt"))==NULL)

{

printf("error\n");

exit(0);

}

for(i=0;i<N;i+=2)

{

fwrite(&stu2[i],sizeof(struct Student),1,fp2);

}

fclose(fp);

fclose(fp2);

}

int main()

{

int i;

struct Student stu[N];

inputandoutput(stu);

line(stu);

for(i=0;i<N;i++)

printf("一个结构体的字节数为:%d\n",sizeof(stu[i]));

read(stu);

return 0;

}


绝对不乖
浏览 1123回答 1
1回答

angie

你用 fprintf 写入的,咋不用 fscanf 读入呢?  可以这么理解吧,fprintf 和 fscanf 操作的是字符串,而 fwrite 和 fread 操作的是二进制
打开App,查看更多内容
随时随地看视频慕课网APP