【C语言】文件信息输入与输出

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41035588/article/details/83051639

要求:

将学生信息(姓名,年龄,学号,家庭住址)写入文件,并输出某一学生信息(比如最后一个学生)

程序中所涉及的函数如下:

1:文件打开函数:fopen(欲打开的文件名称or文件路径,哪种方式)
2:文件关闭函数:fclose(文件指针)
3:文件信息写入函数(数据块):fwrite(要写入数据的地址,要写入数据项的字节数size,要写入size字节数据项的个数,文件指针)
4:文件信息读出函数(数据块):fread(要读出数据的地址,要读出数据项的字节数size,要读出size字节数据项的个数,文件指针)
5:修改文件指针位置的函数:fseek(文件指针,偏移量,从哪开始偏移)
6:读写文件出错检测的函数:ferror(文件指针)
7:文件出错标志or文件结束标志置0的函数:clearerr(文件指针)

参考代码


#include<iostream>
using namespace std;
 
#define NAMESIZE 10
#define ADDARSIZE 20
#define COUNT 4
#define FILENAMESIZE 10
 
/*结构体:学生信息*/
typedef struct Student
{
	char name[NAMESIZE];
	int age;
	int stuNum;
	char addr[ADDARSIZE];
}Student;
 
Student student[COUNT];
 
/*打印第n个学生的信息*/
void showInfor(char *name,int n) 
{
	FILE *fp = NULL;
	/*if((fp = fopen(name,"r")) == NULL)
	{
		cout<<"open error!"<<endl;
	}*/
	fp = fopen(name,"w+");
	if(ferror(fp))
	{
		cout<<"open error!"<<endl;
		clearerr(fp);
	}
 
	fseek(fp,(n-1)*sizeof(Student),0); //修改位置指针,从文件开始0(SEEK_SET)偏移(n-1)*sizeof(Student)个字节
	Student s;
	fread(&s,sizeof(Student),1,fp);//把第n个学生的信息从文件中读出并写入s中
	fclose(fp);
	fp = NULL;
 
	cout<<"name:"<<s.name<<" "<<"stuNum:"<<s.stuNum<<" ";
	cout<<"age:"<<s.age<<" "<<"addr:"<<s.addr<<endl;
 
}
/*把学生信息添加到文件*/
void addInforToFile(char *name)
{
	FILE *fp = NULL;
	/*if( (fp = fopen(name,"w+")) == NULL)	//1打开文件
	{
		cout<<"open error!"<<endl;
	}*/
	fp = fopen(name,"w+");
	if(ferror(fp))
	{
		cout<<"open error!"<<endl;
		clearerr(fp);
	}
	/*for(int i=0;i<COUNT;++i)
	{
		fwrite(&student[i],sizeof(Student),1,fp);
	}//for循环的作用和下面的一句是等价的
	*/
	fwrite(student,sizeof(Student),COUNT,fp);	//将信息(以块的形式)写入文件
	fclose(fp);
	fp = NULL;
}
 
int main()
{
	for(int i=0;i<COUNT;++i)
	{
		cout<<"请输入一下信息"<<endl;
		cout<<"name:";
		cin>>student[i].name;
		cout<<"age:";
		cin>>student[i].age;
		cout<<"stuNum";
		cin>>student[i].stuNum;
		cout<<"addar:";
		cin>>student[i].addr;
	}
	
	cout<<"请输入文件的名称:" ;
	char fileName[FILENAMESIZE];
	cin>>fileName;
	addInforToFile(fileName);
 
	cout<<"你想输出第几个学生的信息:";
	int n;
	cin>>n;
	showInfor(fileName,n);
 
	return 0;
}

注意:涉及文件操作时要注意以下几点

a:定义文件指针时,将指针指向空,即FILE *fp = NULL;
b:fopen()与fclose()函数成对使用,否则会造成文件所占内存泄露以及在下次访问文件时出现错误;
c: 文件关闭后,将文件指针赋值为空,防止出现游离指针,对整个工程造成不必要的麻烦

猜你喜欢

转载自blog.csdn.net/qq_41035588/article/details/83051639