C语言文件操作——输入数据存到文件,从文件读取到结构体

 哈喽!这里是一只派大鑫,不是派大星。本着基础不牢,地动山摇的学习态度,从基础的C语言语法讲到算法再到更高级的语法及框架的学习。更好地让同样热爱编程(或是应付期末考试 狗头.jpg)的大家能够在学习阶段找到好的方法、路线,让天下没有难学的程序(只有秃头的程序员 2333),学会程序和算法,走遍天下都不怕!

今天写真题的时候,解决了好久的疑惑,对的没错 就是文件操作!

早年真题试卷最后大题几乎都是手写文件的一些操作程序,虽然文件操作并不难,但是真正手写出来感觉又是很不一样的。

来看这样一道题:

选自中国海洋大学研究生入学考试2013年真题,该题目在早期期末题也出现过!懂的都懂

题目:

编写一个学生成绩管理程序。有M个(M=50),每个学生有N门(N=3)课程的成绩。

学生信息包括学号、姓名、3门课的成绩及平均成绩

(1)定义结构体类型、各个变量、结构体数组等

(2)编写read函数,用来输入学生信息并存入学生信息文件中

(3)编写average函数从文件中读取数据至结构体数组中,并求出每位同学的平均成绩

(4)编写write函数从文件中读取数据至结构体数组中,并求出每位同学的平均成绩

(5)编写主函数调用以上各函数

简单分析一下,输入是输入到文件中去,并不是直接输入到结构体数组中!

所以两个函数分别打开操作关闭函数。

使用fscanf和fprintf来进行文件的读取和输入比较方便,能直接对应格式~

所以给出我的参考代码:

#include<stdio.h>
#include<iostream>
#include<stdlib.h>
using namespace std;
#define ans 50
struct student{
	int num;
	double s1,s2,s3,avg;
}stu[ans];
void write(){
	printf("学号\t成绩1\t成绩2\t成绩3\t平均成绩:\n");
	for(int i=1;i<=ans;i++){
		printf("%d\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",
		stu[i].num,stu[i].s1,stu[i].s2,stu[i].s3,stu[i].avg);
	}
}
void read(){
	FILE *fp;
	if((fp = fopen("E:\\ftest.txt","w"))==NULL){
		printf("can not open file\n");
	}
	int n; double a,b,c,p;
	for(int i=1;i<=ans;i++){
		scanf("%d%lf%lf%lf",&n,&a,&b,&c);
		p = (a+b+c)/3.0;
		fprintf(fp,"%d %lf %lf %lf %lf\n",n,a,b,c,p);
	}
	fclose(fp);
}
void average(){
	FILE *fp;
	if((fp = fopen("E:\\ftest.txt","r"))==NULL){
		printf("can not open file\n");
	}
	for(int i=1;i<=ans;i++){
		fscanf(fp,"%d %lf %lf %lf %lf",
		&stu[i].num,&stu[i].s1,&stu[i].s2,&stu[i].s3,&stu[i].avg);
	}
	fclose(fp);
}
int main()
{
	read();
	average();
	write();
    return 0;
}

 是不是一看就懂了! 看懂固然重要,但是实践才是检验真理的唯一标准,不妨自己动手试一试~

  • 26
    点赞
  • 212
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是一只派大鑫

一块两块不嫌少,三块四块不嫌多

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值