C语言文件

任务一:

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


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main() {
	FILE* fp;//定义文件指针(必须要指针)
	int i;
	char name_classmates[10][20] = { "画眉","夜鹰","鸬鹚","织布鸟","白头翁","白鹭","翠鸟","雕鸮","蜂鸟","海雕" };//十个字符串名字
	for (i = 0; i < 10; i++) {
		strcat(name_classmates[i], ".txt");//txt文件后缀
		if ((fp = fopen(name_classmates[i], "w")) == NULL) {
			printf("%s file open error!\n",name_classmates[i]);
			exit(0);//防止异常,关闭流
		}//逐个建立文件
		if (fclose(fp)) {
			printf("close the file\n");
			exit(0);
		}
	}
	return 0;
}

运行结果:


任务二:

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


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 100
#define V 10
int main() {

	system("color F9");
	char number[V][N];//学号
	char sex[V][N];//性别
	char classes[V][N];//班级
	char score[V][N];//分数
	FILE* fp;
	int i;
	char name_classmates[10][20] = { "画眉","夜鹰","鸬鹚","织布鸟","白头翁","白鹭","翠鸟","雕鸮","蜂鸟","海雕" };
	for (i = 0; i < 10; i++) {
		strcat(name_classmates[i], ".txt");
		fp = fopen(name_classmates[i], "w");
		if (fp)
		{
			printf("请输入学生%s的性别:       ", name_classmates[i]);
			scanf("%s", sex[i]);
			printf("请输入学生%s的学号:       ",name_classmates[i]);
			scanf("%s", number[i]);
			printf("请输入学生%s的班级:       ", name_classmates[i]);
			scanf("%s", classes[i]);
			printf("请输入学生%s的分数:       ", name_classmates[i]);
			scanf("%s", score[i]);
			fputs(number[i], fp);
			fprintf(fp, "  ");
			fputs(sex[i], fp);
			fprintf(fp, "  ");
			fputs(classes[i], fp);
			fprintf(fp, "  ");
			fputs(score[i], fp);
			printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
			if (i != 0&&i % 2 == 0)
			{
				system("cls");
				system("pause");
			}
			fclose(fp);//关闭文件
		}
		else
		{
			printf("File open fail.\n");
			break;
		}
	}
	return 0;
}

运行结果截图



任务三:

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

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 100
#define V 10
struct student
{
	char name[N];//名字
	char number[N];//学号
	char sex[N];//性别
	char score[N];//分数
	char classes[N];//班级
}stu[10];
int main() {

	system("color F9");
	FILE* fp;
	int i;
	char name_classmates[10][20] = { "画眉","夜鹰","鸬鹚","织布鸟","白头翁","白鹭","翠鸟","雕鸮","蜂鸟","海雕" };
	for (i = 0; i < 10; i++) 
	{
		strcpy(stu[i].name, name_classmates[i]);
		strcat(name_classmates[i], ".txt");
		fp = fopen(name_classmates[i], "r");
		if (fp)
		{
			fscanf(fp, "%s %s %s %s", stu[i].number, stu[i].sex, stu[i].classes, stu[i].score);//读取文件内容并放入结构体中
			fclose(fp);
		}
	
		else
		{
			printf("File open fail.\n");
			break;
		}
	
	}
	for (i = 0;i < 10;i++)
		{
			printf("%s %s %s %s %s\n\n", stu[i].name, stu[i].number, stu[i].sex, stu[i].classes, stu[i].score);

		}
	return 0;
}

运行结果截图


任务四:

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

  1. system("CLS")可以实现清屏操作;
  2. system("pause")可以实现冻结屏幕,便于观察程序的执行结果;
  3. 用 system("color 0A"); 其中color后面的0是背景色代号,A是前景色代号。各颜色代码如下:
    0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=淡蓝色 A=淡绿色 B=淡浅绿色 C=淡红色 D=淡紫色 E=淡黄色 F=亮白色

五.小结

通过这次大作业,我对文件有了以下初步的了解:
- fopen(),fclose函数是用来打开和关闭文件的,若打开失败,就会返回NULL,函数里放的是打开的文件路径或文件名,参数mode字符串代表流行态。

形态字符串 特点
r 以只读的方式打开文件,该文件必须存在
r+ r+以可读写方式打开,该文件必须存在
a+ 打开读写文件文件不存在,则新建,存在。写入的数据会被加到文件尾后,文件原先内容会被保留(原来的EOF不保留)
rw+ rw+读写打开一个文本文件,允许读和写
w w打开只写文件,若文件存在则文件长度轻为0,则该文件内容会消失,若文件不存在,则建立该文件
w+ a以附加方式打开只写文件,若文件存在,则文件长度会被清零,文件内容会消失
a 以附加的方式打开只写文件,若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后(原来的EOF符保留)
at+ 打开一个叫string的文件,a表示append,写入处理的时候接着原有文件写入,t表示打开文本文件,+表示可读写
wb 只写打开或新建一个二进制文件。只允许写数据
wb+ 读写打开或建立一个二进制文件。允许读和写
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据
rb+ rb+读写打开一个二进制文件,允许读写数据
上述的形态字符串都可以再加一个b字符,如
rb,w+b或ab+等组合,加入b字符用来告诉函数以二进制模式打开文件,如果不加b,表示默认加了t,即rt,wt,其中t表示以文本模式打开文件。
- 格式化方式读写文件:fscanf()函数和fprintf()函数
定义:
fscanf(文件指针,格式字符串,输入表);
fprintf(文件指针,格式字符串,输入表)

- 字符方式读写文件:fgetc(),fputc(),用于复制文件
- 字符串方式文件读写函数fgets()fputs()

作用:
fputs()函数用来向指定的文本文件写入一个字符串
fgets()从文本文件中读取字符串
格式:
fputs(s,fp);
fgets(s,n,fp);//n是指定读入字符的个数 
posted @ 2019-12-21 16:46  黎里  阅读(327)  评论(0编辑  收藏  举报