C 读取文件数据

海绵。 2019-03-31 01:48:27
1. 编写程序:一个班有5名同学,每名同学都有如下信息:学号,姓名,三门课程的成绩(高等数学、英语、大学物理)。按以上信息以学号顺序从键盘输入数据并存储在磁盘文件上。 2. 编写程序:从从上面建立的磁盘文件中读取数据;计算每位同学的总成绩,并且按总成绩从高到低排序后输出全班同学的信息(在学号、姓名、高等数学成绩、英语成绩、大学物理成绩、总成绩下输出每行信息)。 第一题已经能解决但是第二问读取数据出现了问题。
...全文
137 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2019-04-01
  • 打赏
  • 举报
回复
fscanf/fprintf, fread/fwrite,fgets/fputs等这些是文件的读写接口,并且是成对出现的,因此怎么写入的,就要考虑用对应的读去操作。
coo135 2019-03-31
  • 打赏
  • 举报
回复
记得把// input_stu(); 前面的//去掉~~~
coo135 2019-03-31
  • 打赏
  • 举报
回复
方法有点笨,供参考。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct _stu {
	char id[12];
	char name[20];
	float math;
	float english;
	float physics;
} student;

int input_stu() {
	student stu[5];
	FILE * out=fopen("s.txt","w");
	if(!out) {
		printf("打开文件失败。\n");
		return 1;
	}
	for(int i=0; i<5; i++) {
		printf("\n输入第 %d 位学生:\n",i+1) ;
		printf("学    号:");
		scanf("%s",&stu[i].id);
		printf("姓    名:");
		scanf("%s",&stu[i].name);
		printf("数学成绩:");
		scanf("%f",&stu[i].math);
		printf("英语成绩:");
		scanf("%f",&stu[i].english);
		printf("物理成绩:");
		scanf("%f",&stu[i].physics);
		fprintf(out,"%s %s %.2f %.2f %.2f\n",stu[i].id,
		        stu[i].name,stu[i].math,stu[i].english,stu[i].physics);
	}
	printf("信息保存成功。\n\n") ;
	fclose(out);
	return 0;
}

int read_stu(student* stu) {
	FILE* in=fopen("s.txt","r");
	if(!in) {
		printf("打开文件失败。\n");
		return 1;
	}
	printf("从文件中读取的成绩如下:\n");
	printf("学号   姓名    数学成绩    英语成绩    物理成绩  \n");
	for(int i=0; i<5; i++) {
		fscanf(in,"%s %s %f %f %f",(stu+i)->id,
		       (stu+i)->name,&(stu+i)->math,&(stu+i)->english,&(stu+i)->physics);
		printf("%s    %s    %4.2f       %4.2f      %4.2f    %4.2f\n",stu[i].id,
		       stu[i].name,stu[i].math,stu[i].english,stu[i].physics);
	}
	fclose(in);
	return 0;
}

int sort(student* stu) {
	student tmp;
	float t;
	float count[5];
	for(int i=0; i<5; i++) {
		count[i]=stu[i].math+stu[i].english+stu[i].physics;
	}
	int  max=0;
	for(int i=0; i<5; i++) {
		max=i;
		for(int j=i+1; j<5; j++) {
			if(count[j]>count[max]) max=j;
		}
		if(max!=i) {
			t=count[i];
			count[i]=count[max];
			count[max]=t;
		
			memcpy(&tmp,&stu[i],sizeof(student));
			memcpy(&stu[i],&stu[max],sizeof(student));
			memcpy(&stu[max],&tmp,sizeof(student));
		}
	}
	return 0;
}

int main() {
	student stu[5];
//	input_stu();//输入信息,然后保存的文件。 
	read_stu(stu);//从文件中读取信息 
	sort(stu);//排序输出 
	printf("\n排序后的成绩如下:\n");
	printf("学号   姓名    数学成绩    英语成绩    物理成绩   总成绩\n");
	for(int i=0; i<5; i++) {
		printf("%s    %s    %4.2f       %4.2f      %4.2f    %4.2f\n",stu[i].id,
		       stu[i].name,stu[i].math,stu[i].english,stu[i].physics,
		       stu[i].math+stu[i].english+stu[i].physics);
	       }
 }

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧