为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
绝对不乖 2016-12-27 14:56:49
/*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;}
查看完整描述

1 回答

?
angie

TA贡献56条经验 获得超8个赞

你用 fprintf 写入的,咋不用 fscanf 读入呢?  可以这么理解吧,fprintf 和 fscanf 操作的是字符串,而 fwrite 和 fread 操作的是二进制

查看完整回答
反对 回复 2017-01-31
  • 1 回答
  • 1 关注
  • 1122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信