C++学习笔记:文本文件

本文详细阐述了C++中使用ofstream和ifstream进行文件操作,包括创建、写入、读取数据,以及追加记录和浏览文件的方法。通过实例展示了如何处理学生信息并计算成绩统计。
摘要由CSDN通过智能技术生成

 一、读写文件

先用cin输入student的信息,写入文本文件中(outfile);

然后又将信息从文本文件中读出来(infile),用cout输出到黑窗口。


 总结精华:

1.写文件 

ofstream outfile(文件名,ios::out)

如果没有这个文件,系统将自动构建

先cin变量的信息,然后outfile<<插入到流中,从而写入文件

2.读文件

ifstream infile(文件名,ios::in)

先infile>>从文件中提取信息赋给变量,再cout变量的值

(infile>>类似cin>>,可以自动跳过空格和换行符)

3.无论读写,都是三步走

1打开文件(如果打不开,就要退出文件)  2文件读或写  3关闭文件


以一个包含学生学号、姓名、成绩的文本文件为例 。

写入时一行放一个学生记录,读取时求最高分、最低分和平均分。

#include<iostream>
#include<fstream>//包含头文件
using namespace std;

struct student
{
	int num;
	char name[20];
	double score;
};

int main()
{
	char filename[20];
	cin >> filename;


	//1.写入文件
	ofstream outfile(filename, ios::out);//写方式打开文件
	if (!outfile)
		abort();//打不开则退出


	outfile << "student manager data\n"; //写文本标题
	student t;
	while (cin >> t.num >> t.name >> t.score)//按control+Z结束输入
	{
		outfile << t.num << ' ' << t.name << ' ' << t.score << '\n'; //写入文本文件流中
	}


	outfile.close();



	//2.读文件
	ifstream infile(filename, ios::in);//读方式打开
	if (!infile)
		abort();

	
	char s[80];
	infile.getline(s, 80);//略去标题行
	student r;
	double total=0;int n = 0;//用于记录平均分
	double min, max;
	while (infile >> r.num >> r.name >> r.score)
		//infile相当于cin,可以无视空格和换行
		//读到eof时会自动结束
	{
		cout << r.num << ' ' << r.name << ' ' << r.score << endl;

		if (n == 0)min = max = r.score;//用第一次输入的score给min和max赋初值
		if (r.score > max)max = r.score;
		if (r.score < min)min = r.score;
		total += r.score;n++;
	}
	double avg = total / n;
	cout << "max=" << max << " min=" << min << " avg=" << avg << endl;


	infile.close();

	return 0;
}

二、 追加记录

ofstream outfile;

outfile.open(filename,ios::app);//追加方式打开文件

注意:此前在写入文件的输入中,while中需加入if(num==0) break;来结束cin的输入;

若继续以按下ctrl+Z来结束输入,则会因为输入流中已有EOF而不能继续输入。

其余与写入文件无异。

//3.追加记录
	outfile.open(filename, ios::app);//追加方式打开文件
	if (!outfile)
		abort();

	char ch;
	cin >> ch;//用户应答,输入y则继续追加,输入其他则结束输入
	student t1;
	while (ch == 'y')
	{
		cin >> t1.num >> t1.name >> t1.score;
		outfile << t1.num << t1.name << t1.score;
		cin >> ch;
	}

三、浏览文件

ifstream infile;

infile.open(filename,ios::in);

注意:此处浏览文件是指单纯的读文件,而不需将信息赋给变量

按行读取:

char s[80];

infile.getline(s,80);

//4.浏览文件
	infile.open(filename, ios::in);//依然是读方式打开文件
	if (!infile)
		abort();

	char s1[80];//确保s1的空间足以装下一整行字符
	while (!infile.eof())//未达到文本末尾时
	{
		infile.getline(s1, 80);//按行读出文件
		cout << s1 << endl;//然后输出
	}

四、复制文件

用inf.get(char)将字符从源文本中读出,

再用outf.put(char)将字符写入另一个文本中,

即完成复制。

为什么不用getline呢,因为好像没有一下子写入一行字符串的函数吧???

//5.复制文件
	ifstream inf("data.dat", ios::in);//读方式打开源文件
	ofstream outf("data1.dat", ios::out);//写方式打开要写入的目标文件
	if (!inf || !outf)
		abort();

	char c;
	while (inf.get(c))//全部字符复制
	{
		outf.put(c);
	}

	inf.close();
	outf.close();

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值