第三次博客园作业

C语言文件

任务一:

你现在拥有一个数组,数组中储存着总共10个人的姓名字符串
你需要为每个人创建一个txt文件,以他们的名字命名。
例如: 生成 笨笨.txt文件

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

	int main() {
		int i;
		char name[10][10] = { "贤贤","劢劢","兆兆","航航","水水","涛涛","晗晗","晟晟","卡卡","炜炜" };//定义十个文件名
		FILE* fp; 
		for (i = 0; i < 10; i++)
		{
			strcat_s(name[i], ".txt");   //将文件格式设置为txt文本文档模式
			fp = fopen(name[i], "w");    //w打开只写文件,如果没有文件则新建一个,如果有则会清空原有内容
			if ((fp = fopen(name[i], "r+")) == NULL)
			{
				printf("打开文件失败!\n");

			}
			if (fclose(fp))
				printf("关闭文件失败!\n");
		}
		return 0;
	}

运行截图

任务二:

在任务一的基础上,这次不仅仅要创建txt文件,还需要往文件中写入
每个人的学号,性别,班级,线代成绩

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student {
	char Name[20];
	char Sex[20];
	char Class[20];
	char Number[20];
	char Score[20];
};
int main()
{
	system("color 9F");//改变界面和字体颜色
	int  i;
	char name[10][10] = {"贤贤","劢劢","兆兆","航航","水水","涛涛","晗晗","晟晟","卡卡","炜炜"};
	struct student stu[20];
	FILE* fp;
	printf("姓名 学号 性别 班级 线代成绩\n");//只在第一行输出,方便输入
	for (i = 0; i < 10; i++)
	{
		printf("%s ", name[i]);//自动输出需要录入信息的学生名称
		strcpy(stu[i].Name, name[i]);//因为之后name[]中学生名称会带有.txt后缀,利用结构保存原来的名称
		strcat(name[i], ".txt");
		fp = fopen(name[i], "w");
		if ((fp = fopen(name[i], "r+")) == NULL)
		{
			printf("打开文件失败!\n");
            exit(0);
		}
		scanf("%s %s %s %s", stu[i].Number, stu[i].Sex, stu[i].Class, stu[i].Score);
		fprintf(fp, "%s %s %s %s %s",stu[i].Name,stu[i].Number,stu[i].Sex,stu[i].Class, stu[i].Score);
		if (fclose(fp))
			printf("关闭文件失败!\n");
	}
	printf("添加成功!");
	return 0;
}

运行截图

任务三:

在任务二生成的文件中,将每个人的信息再重新读取出来,放入数组中。
[要求使用结构体数组,结构体需要包含姓名,学号,性别,班级,线代成绩5个属性]

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student {
	char Name[20];
	char Sex[20];
	char Class[20];
	char Number[20];
	char Score[20];
};
int main()
{
	system("color 9F");
	int  i;
	char name[10][10] = { "贤贤","劢劢","兆兆","航航","水水","涛涛","晗晗","晟晟","卡卡","炜炜" };
	struct student stu[20];
	FILE* fp;
	printf("姓名 学号 性别 班级 线代成绩\n");
	for (i = 0; i < 10; i++)
	{
		strcpy(stu[i].Name, name[i]);
		strcat(name[i], ".txt");
		fp = fopen(name[i], "r");//对文件只读
		if ((fp = fopen(name[i], "r+")) == NULL)
		{
			printf("打开文件失败!\n");
			exit(0);
		}
		fscanf(fp, "%s %s %s %s", stu[i].Number, stu[i].Sex, stu[i].Class, stu[i].Score);
		if (fclose(fp))
			printf("关闭文件失败!\n");
	}
	for (i = 0; i < 10; i++) {
		printf("%s %s %s %s %s\n", stu[i].Number, stu[i].Sex, stu[i].Class, stu[i].Score);    //输出数组中的信息
	}
	return 0;
}

运行截图

任务四:

试着使用一下 system("cls"),system("pause") 这两个命令,看看这两个
命令能不能对你的程序起到一些美化的作用。
拓展:上网搜索类似的其他函数,使用并解释他们的作用。
【想找几个是几个】

system("cls")//清屏命令
system("pause")//暂停命令

将写入和读取两部分合并一起时可以用到system("pause")和system("cls")的命令暂停一会后清空写入过程屏幕,然后输出读取结果使界面更加美观
system("color")函数可以改变控制台的前景色和背景
背景色 0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=淡蓝色
字体色 A=淡绿色 B=淡浅绿色 C=淡红色 D=淡紫色 E=淡黄色 F=亮白色

遇到的问题

读取时进行fopen操作的时候用的是"w"而不是"r"导致文件内容被清空读取完后出现一堆的"烫"QAQ

心得体会

学习了文件的打开关闭写入读取的基本操作
学会了利用system函数美化自己的程序

posted @ 2019-12-21 21:30  20190211飞飞  阅读(130)  评论(0编辑  收藏  举报