当前位置: 移动技术网 > IT编程>开发语言>C/C++ > C++读写文件操作

C++读写文件操作

2020年10月09日  | 移动技术网IT编程  | 我要评论
文件操作:#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

文件操作:

#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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网