【C++IO流】C++打印浮点数小数点后多少的方法,序列化

1.iostream

1.打印浮点数的小数后的位数

建议:
    1、C++尽量去用cin和cout,能用它就用他
    2、用cout和cin不方便的地方,再去用scanf和printf

例子:

C++打印浮点数小数点后多少的方法

  • 头文件iomanip
  • fixed保留小数点后的0,比如1.103打印后3位;不加fixed打印1.1
  • setpresision关键字
    double a = 1.0 / 3.0;
	printf("%.3f\n", a);

    //C++打印浮点数小数点后多少的方法
    #include<iomanip>
	cout <<fixed<< setprecision(4) << a << endl;
    

2.getline和cin区别

有些oj需要多组测试,要求持续输出 ?

  • cin获取字符串直到空格和换行
  • getline获取字符串直到换行
	string str;
	cin >> str;//获取字符串直到空格和换行
	cout << str<<endl;
	cin >> str;
	cout << str<<endl;

	getline(cin,str);//获取字符串直到换行
	cout << str<<endl;

3.多组测试,要求持续输出

  • cin>>str返回值明明对象cin,为什么它可以做判读语句;重载了operator bool

	//有些oj需要多组测试,要求持续输出
	// ctrl+c结束

	//C++
	string str;
	while (cin >> str)
	{
		cout << str << endl;
		//...
	}

	//C语言
	char buf[100];
	while(scanf("%s", buf) != EOF)
	{
		printf("%s\n", buf);
		//...
	}

2.fstream

  • 重载">>"和"<<"
struct ServerInfo
{
	char _ip[20];
	int  _port;
};

struct ConfigManager
{
public:
	ConfigManager(const char* filename)
		:_filename(filename)
	{}


	void WriteTxt(const ServerInfo& info)
	{
		/*ofstream ofs(_filename);
		ofs.write(info._ip, strlen(info._ip));
		ofs.put('\n');
		string portstr = to_string(info._port);
		ofs.write(portstr.c_str(), portstr.size());*/

		// C++流多提供的,其他的c一样都可以实现
		ofstream ofs(_filename);
		ofs << info._ip << "\n" << info._port;
	}

	void ReadTxt(ServerInfo& info)
	{
		//ifstream ifs(_filename);
		//ifs.getline(info._ip, 20);
		 
		//char portbuff[20];
		//ifs.getline(portbuff, 20);
		//info._port = stoi(portbuff);

		// C++流多提供的,其他的c一样都可以实现
		ifstream ifs(_filename);
		ifs >> info._ip >> info._port;
	}

private:
	string _filename;
};

3.sstream

c语言的序列化和反序列化

  • 序列化:将其他类型转化为字符串
  • 反序列化:将字符串转化为原本的类型

struct ServerInfo
{
	char _ip[20];
	int  _port;
};
int main()
{
	ServerInfo info = { "192.0.0.1", 8000 };
	char buff[128];
	// 序列化
	sprintf(buff, "%s %d", info._ip, info._port);

	// 反序列化
	ServerInfo rinfo;
	sscanf(buff, "%s%d", rinfo._ip, &rinfo._port);
}

c++的序列化和反序列化

struct ServerInfo
{
	char _ip[20];
	int  _port;
};
int main()
{
    ServerInfo info = { "192.0.0.1", 8000 };
	stringstream ssm;
	// 序列化
	ssm << info._ip <<" "<<info._port;
	string buff = ssm.str();

	// 序列化
	stringstream ssm;
	ssm.str("127.0.0.1 90");

	// 序列化
	stringstream ssm("127.0.0.1 90");
	ServerInfo rinfo;
	// 反序列化
	ssm >> rinfo._ip >> rinfo._port;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值