C++基础之文件读写重复问题

代码走起来:


```cpp
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<fstream>
using namespace std;

class teacher{
private:
	char name[20];
	int age;
public:
	teacher()
	{
		strcpy(name, "tangyong");
		age = 23;

	}
	teacher(char *n, int a)
	{
		strcpy(name, n);
		age = a;
	}
	void print()
	{

		cout << "age:" << age << "name:" << name << endl;
	}
};

static char *filename = "C:\\Users\\sotn\\Desktop\\12.txt";
static char buf[] = "\n";
void writedata()
{
	teacher t1("TY", 22), t2("tangyong", 23);
	teacher t3("TY_1", 22), t4("tangyong_1", 24);

	ofstream fp(filename, ios::binary | ios::app);//二进制方式打开适合类中的对象
	if (!fp)
	{
		cout << "文件打开失败\n";
		exit(0);
	}
	
	
	fp.write((char *)&t1, sizeof(t1));
	fp.write(buf, sizeof(buf));
	fp.write((char *)&t2, sizeof(t2));
	fp.write(buf, sizeof(buf));
	fp.write((char *)&t3, sizeof(t3));
	fp.write(buf, sizeof(buf));
	fp.write((char *)&t4, sizeof(t4));
	fp.write(buf, sizeof(buf));
	fp.close();

}

void readData()
{
	//方法1:每次都多读了最后一行
	/*ifstream fin(filename);
	teacher temp;
	while (!fin.eof())
	{
		fin.read((char *)&temp, sizeof(teacher));
		temp.print();
		fin.read(buf, sizeof(buf));
		cout << buf;

	}
fin.close();
*/

	//方法2:解决了方法1中的问题

	ifstream fin(filename);
	teacher temp;
	while (fin.peek() != EOF)
	{
		fin.read((char *)&temp, sizeof(teacher));
		temp.print();
		
		fin.read(buf, sizeof(buf));
		cout << buf;

	}
	fin.close();

	/*
	关于peek()
	peek放回输入流中下一个字符的副本,但不会将它从流中删除,peek返回的值仍然留在流中。
	EOF表示文件的结束
	所以使用第一种方法的时候,读完最后一条记录的时候没有指向EOF,
	假设文件有内容 aaaa,bbbb,cccc,dddd那结构如下:
	aaaa
	bbbb
	cccc
	dddd
	EOF
	那我们改进方法1,每次读完之后都在判断一下
	
	*/


}
void main()
{
//	writedata();
	
	readData();
	remove(filename);
	
	system("pause");
}

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发如雪-ty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值