C语言中文件的格式化输入与输出

源码:
#include<stdio.h>
#include<stdlib.h>
#define N 30
#define _CRT_SECURE_NO_WARNINGS
typedef struct data {
	int year;
	int month;
	int day;
}DATA;

typedef struct student {
	long stuID;
	char stuName[10];
	char stuSex;
	DATA stuBirthday;
	double score[4];
	double aver;
}STUDENT;

void inputScore(STUDENT stu[], int n, int m);

void averSorce(STUDENT stu[], int n, int m);

void writeToFile(STUDENT stu[], int n, int m);

void main() {

	STUDENT stu[N];
	int n;
	printf("How many students?");
	scanf("%d", &n);
	inputScore(stu, n, 4);
	averSorce(stu, n, 4);
	writeToFile(stu, n, 4);
}

/* 从键盘输入n个学生的学号,姓名,性别,出生日期,以及m门课程的成绩到结构体数组stu中 */

void inputScore(STUDENT stu[], int n, int m) {
	int i, j;
	for (int i = 0; i < n; i++)
	{
		printf("Input record %d:\n", i + 1);
		scanf("%ld", &stu[i].stuID);
		scanf("%s", stu[i].stuName);
		scanf(" %c", &stu[i].stuSex);
		scanf("%d", &stu[i].stuBirthday.year);
		scanf("%d", &stu[i].stuBirthday.month);
		scanf("%d", &stu[i].stuBirthday.day);
		for ( j = 0; j < m; j++)
		{
			scanf("%lf", &stu[i].score[j]);
		}
		
	}
}

/* 计算n个学生的m门课程的成绩的平均分,存入数组stu的成员aver中 */
void averSorce(STUDENT stu[], int n, int m) {
	int i, j;
	double sum;
	for ( i = 0; i < n; i++)
	{
		sum = 0;
		for ( j= 0; j < m; j++)
		{
			sum = sum + stu[i].score[j];
		}
		stu[i].aver = (double)sum / m;
	}
}


/* 输出n个学生的信息到"D:\student"中 */
void writeToFile(STUDENT stu[], int n, int m) {
	FILE* fp;
	int i, j;
	if ((fp = fopen("D:\\student.txt", "w")) == NULL) {	/* 以写的方式打开文件 */
		printf("Fail to open student.txt !\n");
		exit(0);
	}
	fprintf(fp, "%d\t%d\t\n", n, m);	//将学生的人数和课程门数写入文件
	for (i = 0; i < n; i++)
	{
		fprintf(fp, "%10ld%10s%3c%6d/%02d/%02d", stu[i].stuID,
			stu[i].stuName,
			stu[i].stuSex,
			stu[i].stuBirthday.year,
			stu[i].stuBirthday.month,
			stu[i].stuBirthday.day);
		for ( j = 0; j < m; j++)
		{
			fprintf(fp, "%6.1f", stu[i].score[j]);
		}
		fprintf(fp, "%6.1f\n", stu[i].aver);

	}
	fclose(fp);

}
运行结果:

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值