欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++读写文件操作

程序员文章站 2022-04-15 21:31:29
文件操作:#include #include #include // 为了使用Sleep()函数 using namespace std;struct FishOil//1定义一个结构{std::string name;std::string uid;char sex;};bool InitFishC();//声明一个初始化的函数bool ReadFishC...

文件操作:

#include <iostream>
#include <fstream>
#include <windows.h>         // 为了使用Sleep()函数 
using namespace std;

struct FishOil//1定义一个结构
{
	std::string name;
	std::string uid;
	char sex;
};

bool InitFishC();//声明一个初始化的函数
bool ReadFishC();//从文件读取数据
void RecordFishC();//记录数据
bool WriteFishC(FishOil *OilData);//将数据写入文件

int main()
{
	int i;

	InitFishC();  // 2初始化数据。 
	while (1)
	{
		std::cout << "请选择需要进行的操作: \n";
		std::cout << "1. 打印数据到屏幕\n";
		std::cout << "2. 录入数据\n";
		std::cout << "3. 退出程序\n";
		std::cin >> i;//输入你选择的序号123

		switch (i)//根据i进行跳转
		{
		case 1://从文件中读取数据并打印到屏幕上
			if (ReadFishC())//读取文件成功会有一个返回值,如果返回1表明读取成功
				std::cout << "成功读取文件^_^\n\n";
			else
				std::cout << "读取文件失败T_T\n\n";
			break;
		case 2:
			RecordFishC();//记录数据
			break;
		case 3://退出程序
			return 0;
		}
	}

	std::cout << "初始化失败T_T......\n\n";//没有进入执行上述while循环

	return 0;

}

bool InitFishC()//初始化函数,使用bool类型是为了确定函数调用是否成功
{
	FishOil OilInit = { "白天", "fc00001", 'M' };//初始化结构,就是赋值

	if (WriteFishC(&OilInit) == false)//初始化之后写进文件,if判断一下写入函数是否调用成功,实参传进去的是WriteFishC(&OilInit)是一个地址,结构的首地址
		std::cout << "初始化失败T_T\n";
}

bool ReadFishC()//从文件中读出来
{
	std::string temp;//定义一个字符串
	std::ifstream fileInput("FishC.txt");//使用文件流打开文件省略了.open()函数

	if (fileInput.is_open())//打开成功
	{
		std::cout << "\n正在输出记录数据...... ";
		for (int i = 0; i <= 100; i++)      // 打印百分比 
		{
			std::cout.width(3);//输出的字符串宽度
			std::cout << i << "%";
			Sleep(50);//在c++下以ms为单位,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000);
			std::cout << "\b\b\b\b";
		}
		std::cout << "\n\n";


		std::cout << " 姓名 " << "  身份证  " << " 性别 " << "\n\n";

		while (std::getline(fileInput, temp))//传进去的参数第一个是输入流fileInput为什么不行????,读出来的一行数据存在temp中
		{
			std::cout << temp << "   ";
			std::cout << "\n";
		}
		std::cout << "\n\n";

		return true;
	}
	else
		return false;
}

void RecordFishC()
{
	char goon, Save;
	FishOil OilData;//给结构定义一个对象
	FishOil *pOilData;//指向结构的指针

	goon = 'Y';//字符
	while ('Y' == goon)
	{
		std::cout << "请输入账号: ";
		std::cin >> OilData.name;
		std::cout << "请输入身份证:";
		std::cin >> OilData.uid;
		std::cout << "请输入性别:";
		std::cin >> OilData.sex;

		std::cout << "录入成功, 请问需要保存吗?(Y/N)";
		std::cin >> Save;//字符
		if ('Y' == Save)//是否保存
		{
			pOilData = &OilData;//指针指向OilData这个对象
			if (WriteFishC(pOilData))//写入文件,需要传进去一个地址
				std::cout << "成功写入文件^_^\n";
			else
				std::cout << "写入文件失败T_T\n";
		}
		else
		{
			return;
		}

		std::cout << "/n请问需要再次录入吗?(Y/N)";
		std::cin >> goon;
	}
}

bool WriteFishC(FishOil *pOilData)//写入函数参数是一个指向结构体的指针,因此实参应该传入一个地址
{
	std::ofstream fileOutput("FishC.txt", std::ios::app);//使用文件流操作对象fileOutput,
	//参数std::ios::app如果没有文件,生成空文件;如果有文件,在文件尾追加。
	// std::ios::app用来说明在老数据追加新数据 
	if (fileOutput.is_open())//判断要写进的文件是否打开成功,打开成功进入if语句将其写入文件
	{
		fileOutput << pOilData->name << " ";
		fileOutput << pOilData->uid << " ";
		fileOutput << pOilData->sex << "\n";

		fileOutput.close();//写入成功关闭文件
		std::cout << "数据成功保存到FishC.txt\n\n";
	}
	else
		std::cout << "保存失败T_T\n";
} 

本文地址:https://blog.csdn.net/m0_37957160/article/details/108977267

相关标签: C++ 读写文件