文件的输入输出

一、文件:
1.程序文件(文件的内容为程序代码):源程序文件(.c)、目标文件(.obj)、可执行文件(.exe)
2.数据文件:文件的内容是 供程序运行时读写/读入的数据(程序运行过程中输出到磁盘)数据文件根据数据的组织形式又可以分为:ASCII文件(在存储前进行转转)和二进制文件(不加转换地输出到外存)
--------C语言一般处理的数据的输入和输出都是从终端的键盘输入数据,运行结果输出到终端显示器,如果要将一些数据输出到磁盘保存,就需要用到 磁盘文件。
文件标识:1.文件 路径 2.文件名主干 3.文件后缀 eg:D:\c\file.txt
二、文件的打开与关闭
在这里插入图片描述

**文件的打开需要定义一个指针变量来指向该文件,建立文件与指针变量之间的联系,对文件的读写等操作都是通过这个指针变量来进行的。关闭文件也就是撤销文件信息区和文件缓冲区。**

fopen和fclose函数的调用形式:
fopen(文件名,使用文件方式);fopen函数的返回值是指向文件的指针
fclose(文件指针)文件不关闭则会丢失数据

C语言中文件的操作语法中,打开文件有以下几种模式:
在这里插入图片描述
在这里插入图片描述
向文件读写字符和字符串操作需要用到的函数有:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三、以二进制形式向文件读写一组数据
用到的函数有fread()和fwrite()。
调用形式为:

fread(buffer【存放从文件读入的数据在存储区的地址】,size【要读写的字节数】,count【要读写多少个数据项】,fp【FILE类型指针】);
fwrite(buffer【把地址开始的存储区中的数据向文件输出】,size【要读写的字节数】,count【要读写多少个数据项】,fp【FILE类型指针】);

代码实现:

文件的输入输出的封装结构:
void inputStruct();//向结构体中输入数据
void ouputStruct();//输出结构体中的数据
int saveFile();//以二进制形式写文件
int freadFile(FILE *fp);//以二进制形式读文件

const int size=3;

struct Student{
	char name[10];
	int num;
	int age;
	char addr[15];
}stud[size];

void inputStruct(){
	int i;
    printf("enter data of students's name,num,age,addr:\n");
    for(i=0;i<size;i++){   
        scanf("%s%d%d%s",
                  &stud[i].name,&stud[i].num,
                   &stud[i].age,&stud[i].addr);
   }
	ouputStruct();
}
void ouputStruct(){
	printf("结构体中存入的数据为:\n");
	for(int i=0;i<size;i++){
		printf("%s\t%d\t%d\t%s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
	}
}
int saveFile(){
	FILE *fp;
	if((fp=fopen("two.dat","wb"))==NULL){
		printf("file failed");
		return 0;
	}else{
		for(int i=0;i<size;i++){
			if(fwrite(&stud[i],sizeof(struct Student),1,fp)!=1)
				printf("write failed");
		}
	}
	fclose(fp);
	freadFile(fp);
	return 0;
}
int freadFile(FILE *fp){
	if((fp=fopen("two.dat","rb"))==NULL){
		printf("file failed");
		return 0;
	}else{
		for(int i=0;i<size;i++){
			fread(&stud[i],sizeof(struct Student),1,fp);
		}
	}
		fclose(fp);
		return 0;
}
int main()
{ 
	inputStruct();
    saveFile();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40871196/article/details/84964714