c++IO流!!!开工了!!!

news2024/12/24 3:01:26

在这里插入图片描述

1.什么是IO流

  1. 流是若干个字节组成的字节序列,简单来说指的是就是数据从一端到另一端
  • 键盘到程序——>标准输入流
  • 程序到屏幕——>标准输出流
  • 程序到文件——>文件流
  1. 流类体系:一些体系管理输入和输出的流的操作
  • 输入流
  • 输出流
  • 文件流
  1. ios
  • istream
    • ifstream
    • istringstream
  • ostream
    • ofstream
    • ostringstream
    1. istream和ostream----->iostream
    2. ifstream和ofstream---->fstream
  1. 所有流操作都可以采用**>> <<**运算完成输入的流动操作

2.C++输入输出流

  • No.1 输入输出流对象
  • cin标准输入,可以被重定向
  • cout标准输出,可以被重定向
  • cerr标准错误,必须要输出到屏幕,不可以被重定向
  • clog标准错误,输出到屏幕,可以被重定向
  • No.2 输入输出流对象对于字符具有成员函数的调用方式
  • 字符
    • get()输入字符
    • put()输出字符
  • 字符串
    • getline()输入字符串
    • writer()输出字符串
  • No.3 流控制字符(C++流控制字符类似于C语言的转义字符 控制格式,比较鸡肋)
  • 必须包含头文件#include<iomanip>
  • 流控制字符有两种形态,一个是成员函数的方式,一个是类似关键字的方式—>下面介绍类似关键字的方式
    • setbace()按照不同的进制输出十进制数—–>支持八、十、十六进制
    • setprecision()设置有效位数
      • 要控制小数位,需要结合fixed
    • setw()设置数据宽度
    • setiosflags()设置对其方式
      • ios::left
      • ios::right
    • put_time格式时间格式—>如下表
specifierReplaced byExample
%aAbbreviated weekday name *Thu
%AFull weekday name *Thursday
%bAbbreviated month name *Aug
%BFull month name *August
%cDate and time representation *Thu Aug 23 14:55:02 2001
%CYear divided by 100 and truncated to integer (00-99)20
%dDay of the month, zero-padded (01-31)23
%DShort MM/DD/YY date, equivalent to %m/%d/%y08/23/01
%eDay of the month, space-padded ( 1-31)23
%FShort YYYY-MM-DD date, equivalent to %Y-%m-%d2001-08-23
%gWeek-based year, last two digits (00-99)01
%GWeek-based year2001
%hAbbreviated month name * (same as %b)Aug
%HHour in 24h format (00-23)14
%IHour in 12h format (01-12)02
%jDay of the year (001-366)235
%mMonth as a decimal number (01-12)08
%MMinute (00-59)55
%nNew-line character ('\n')``
%pAM or PM designationPM
%r12-hour clock time *02:55:02 pm
%R24-hour HH:MM time, equivalent to %H:%M14:55
%SSecond (00-61)02
%tHorizontal-tab character ('\t')``
%TISO 8601 time format (HH:MM:SS), equivalent to %H:%M:%S14:55:02
%uISO 8601 weekday as number with Monday as 1 (1-7)4
%UWeek number with the first Sunday as the first day of week one (00-53)33
%VISO 8601 week number (00-53)34
%wWeekday as a decimal number with Sunday as 0 (0-6)4
%WWeek number with the first Monday as the first day of week one (00-53)34
%xDate representation *08/23/01
%XTime representation *14:55:02
%yYear, last two digits (00-99)01
%YYear2001
%zISO 8601 offset from UTC in timezone (1 minute=1, 1 hour=100) If timezone cannot be termined, no characters+100
%ZTimezone name or abbreviation * If timezone cannot be termined, no charactersCDT
%%A % sign%

测试代码

#include<iostream>
#include<iomanip>
#include<ctime>
using namespace std;
int main()
{

#if 0
	cerr << "标准错误,不可以被重定向" << endl;
	clog << "标准错误,可以被重定向" << endl;
	cout << "字符输入:" << endl;
	char key = cin.get();
	cout.put(key);
	setbuf(stdin, nullptr);        //清空缓冲区操作
	cout << "字符串输入:" << endl;
	char buffer[20] = "";
	cin.getline(buffer, 20);       //优点在于可以设置长度
	cout.write(buffer, 20);
#endif
	//进制
	cout << setbase(16) << 16 << endl;
	cout << setbase(8) << 16 << endl;
	cout << hex << 16 << endl;			//16进制
	cout << oct << 16 << endl;			//8进制
	cout << dec << 16 << endl;			//10进制
	//精度控制
	double pi = 3.1415926535;
	cout << pi << endl;
	cout << setprecision(4) << pi << endl;      //4位有效位数
	cout <<fixed<< setprecision(4) << pi << endl; //结合fixed,4位小数
	cout.unsetf(ios::fixed);                      //取消fixed
	cout << pi << endl;       
	//制表 输入数据宽度+对齐方式
	cout << setiosflags(ios::left);
	cout << setw(6) << "姓名" << setw(6) << "年龄" << setw(6) << "学号" << endl;
	cout << setw(6) << "张飞" << setw(6) << 18 << setw(6) << 1001 << endl;
	cout << setw(6) << "关羽" << setw(6) << 28 << setw(6) << 1002 << endl;
	cout << setw(6) << "刘备" << setw(6) << 38 << setw(6) << 1003 << endl;
	//时间
	time_t num = time(nullptr);                     //获取时间
	tm* timeData = localtime(&num);                 //加载时间
	cout << put_time(timeData, "%F %r") << endl;    //输出时间
	return 0;
}

测试结果
在这里插入图片描述

3.推荐查阅网站

https://cplusplus.com/reference/

这里是分类的,查阅c/c++都比较方便,网站是英文的,大家可以翻译一下

在这里插入图片描述

4.c++字符流

  • 字符流头文件#include<sstream>,都存在一个宽字节版本的格式
  • istringstream
  • ostringstream
  • 一般处理字符流的是使用的类是stringstream
  • string str()获取字符流的字符串
  • void str(const string& str)重置stringstream对象中的数据
  • 应用场景
  • 数据的类型转换
  • 字符串的切割

综合代码

#include<sstream>
#include<iostream>
#include<string>
using namespace std;
int main()
{
#if 0
	stringstream object;
	object << "king";
	cout << object.str() << endl;     //获取字符流中的字符串
	char buffer[1024] = "";
	object >> buffer;                 //object中的字符串流向buffer
	cout << buffer << endl;
#endif
	//No.1 数据的转换
	int data = 1234;
	string name = to_string(data);
	cout << name << endl;
	//easyx不能输出数字,数字转字符串
	cout << "................" << endl;
	//计算器
	int res = 0;                    //字符串转数字
	stringstream translate;
	string str = "12345";
	translate << str;              //先把字符串流到translate
	translate >> res;              //再从translate中流到res中
	cout << res << endl;

	//No.2  数据分割
	stringstream ip("192.168.1.1");
	int ipnum[4];
	char key[3];
	for (int i = 0; i < 4; i++)
	{
		ip >> ipnum[i];
		if( i < 3 ) ip >> key[i];
	}
	for (int i = 0; i < 4; i++)
	{
		cout << ipnum[i] << "\t";
	}
	cout << endl;

	//注意:一个流做类型转换,多次一定要clear清除
	res = 0;
	string temp = "88888";
	translate.clear();    //并不是清除,是指针的移动
	translate << temp;
	translate >> res;
	cout << res << endl;
	//清除
	stringstream test("kkkkkkkk");
	test.str("");
	//test.clear();
	cout << test.str() << endl;
	return 0;
}

测试结果

在这里插入图片描述

5.c++文件流

1.文件流类

  • fstream 读写操作
  • ofstream写操作 ouput:打印 打印东西到文件就是写操作
  • ifstream读操作 input:把文件当作输入的地方
  • #include<fstream>
  • 打开文件:void open(const char* URL,ios::openmode mode)
  • ios::in
  • ios::out 写 具有创建功能
  • ios::app 追加模式 具有创建功能
  • ios::ate 打开已有文件 文件指针在文件末尾
  • ios::trunc 文件不存在具有创建文件功能
  • ios::binary 二进制
  • ios::nocreate 不创建
  • ios::replace 不做替换
  • 组合方式
    • ios::in|ios::out
    • ios::in|ios::trunc
    • ios::in|ios::binary|ios::trunc
  • 文件关闭:void close()
  • 文件状态函数
    • 文件为空
      • bool is_open()返回false打开文件失败,true是成功
      • !文件流对象
    • int eof()判断是否到达文件末尾

综合代码

#include<iostream>
#include<string>
#include<fstream>
using namespace std;
class File
{
public:
	File(string name="",int age=0,int num=0):name(name),age(age),num(num){}
	void print()
	{
		cout << name << "\t" << age << "\t" << num << endl;
	}
	string& getName() { return name; }
	int& getAge() { return age; }
	int& getNum() { return num; }
	void saveFile(const char* filename)
	{
		fstream file;
		file.open(filename,  ios::out);
		if(!file)
		{
			cout << "打开文件失败" << endl;
			return;
		}
		//流方式写数据,尽量写空格和换行,便于作为读出来的格式数据的风格
		file << name << " " << age << " " << num << " " << endl;
		file.close();
	}
	void readFile(const char* filename)
	{
		fstream file(filename, ios::in);
		if (!file)
		{
			cout << "打开文件失败" << endl;
			return;
		}
		file >> this->name >> this->age >> this->num;
		file.close();
	}
protected:
	string name;
	int age;
	int num;
};

//字符读写,ASCII码读写
void asciiReadwrite(const char* readfile,const char* writefile)
{
	fstream read(readfile, ios::in);
	fstream write(writefile, ios::out);
	if(!read||!write)
	{
		cout << "打开文件失败" << endl;
		return;
	}
	while (!read.eof())
	{
		char key;
		read.get(key);
		write.put(key);
	}
	read.close();
	write.close();
}

//二进制读写
void binaryReadwrite(const char* readfile, const char* writefile)
{
	fstream in(readfile, ios::in | ios::binary);
	fstream out(writefile, ios::out | ios::binary);
	if (!in || !out)
	{
		cout << "打开文件失败" << endl;
		return;
	}
	while (!in.eof())
	{
		char key[1024] = "";
		in.read(key, 1024);
		out.write(key, strlen(key) + 1);//要有效长度,否则多出的会都用空格写上
	}
	in.close();
	out.close();
}
int main() 
{
	File file("king", 18, 1001);
	file.saveFile("1.txt");
	File x;
	x.readFile("1.txt");
	x.print();

	asciiReadwrite("1.txt", "2.txt");
	binaryReadwrite("1.txt", "3.txt");
	return 0;
}

2.c++文件指针

  • ifstream对象
  • ifstream& seekg(long int pos);
  • ifstream& seekg(long int pos,ios::base::seekdir begin);
  • ofstream对象
  • ofstream& seep(long int pos);
  • ofstream& seep(long int pos,ios::base::seekdir begin);
  • seekdir
  • ios::beg开始的位置
  • ios::end结束的位置
  • ios::cur当前位置
void testseekReadfile(const char* filename)
{
	fstream read(filename, ios::in);
	if (!read) { cout << "打开文件失败" << endl; return; }
	read.seekg(3, ios::beg);
	char key = read.get();
	cout << key << endl;
	read.seekg(-3, ios::end);
	char k = read.get();
	cout << k << endl;
	read.close();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/185712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【DockerCE】使用docker配置和运行HertzBeat

HertzBeat是一款免Agent的监控平台&#xff0c;拥有强大自定义监控能力&#xff0c;可以对应用服务、中间件、数据库、操作系统、云原生等进行监控&#xff0c;配置监控告警阈值&#xff0c;以及告警通知(邮件、微信、钉钉、飞书)。关于这个软件的介绍&#xff0c;我这里就不做…

困扰多年的Docker和iptables的恩怨,今天解决了

先介绍下我的使用环境&#xff1a; 操作系统&#xff1a;CentOS7.9 Docker版本&#xff1a;20.10.21 事情是这样的&#xff0c;安装完Docker的时候&#xff0c;容器镜像都跑起来了&#xff0c;端口也放行了&#xff0c;就是无法控制系统防火墙friewalld,查看firewalld状态报错 …

【微信小游戏开发笔记】第一节:微信小游戏Cocos开发环境配置

微信小游戏开发环境配置 微信小游戏开发前&#xff0c;首先要做一些准备&#xff1a; 注册 微信公众平台 账号&#xff0c;获取小游戏AppID(小程序ID)。安装 微信开发者工具&#xff0c;用于编译小游戏。安装 Visual Studio Code&#xff0c;用于编写游戏逻辑代码。安装并配置…

Linux命令:wget(下载文件)、ssh(登录及免密登录)、scp(远程文件传输)、sh(脚本)

wget 概述 wget是一个下载文件的工具&#xff0c;用在命令行下&#xff0c;下载一些软件或从远程服务器恢复备份到本地服务器 wget支持HTTP&#xff0c;HTTPS和FTP协议&#xff0c;可以使用HTTP代理 支持自动下载 wget可以在用户退出系统的之后在后台执行。意味着你可以登…

C语言选择排序和快速排序(图解过程)+思路清晰

选择排序和快排选择排序时间复杂度和空间复杂度快排&#xff08;三种方式&#xff09;1.hoar时间复杂度和空间复杂度优化--三数取中优化--小区间优化2.挖坑法3.双指针&#xff08;推荐&#xff09;选择排序 本篇文章的重点在快排。因为选择排序无论是在思想上面还是&#xff0…

提供数百万岗位和丰厚利润,苹果却转移产业链,中国制造怎么办?

新年刚过&#xff0c;就传出消息指苹果直接代中国供应链企业向印度提出建厂申请&#xff0c;其中有14家获得了许可&#xff0c;而3家被否决&#xff0c;这凸显出苹果坚定向印度转移生产线&#xff0c;如此做对中国制造将产生深远影响。一、苹果对中国制造的影响巨大苹果为中国提…

新的一年,这份高级测试人的职业素养请收好~

软件测试工程师需要的专业技能计算机领域的专业技能是测试工程师应该必备的一项素质&#xff0c;是做好测试工作的前提条件。尽管没有任何IT背景的人也可以从事测试工作&#xff0c;但是一名要想获得更大发展空间或者持久竞争力的测试工程师&#xff0c;则计算机专业技能是必不…

5G R16+C-V2X赋能下一代智能T-Box,助力智能驾驶时代加速到来

█ 5G技术助力C-V2X持续进化&#xff0c;智能网联新生态逐步建立 汽车行业正面临百年未有之变局&#xff0c;智能汽车已经成为全球汽车产业发展的战略方向。发改委、工信部、交通部等11部委联合印发的《智能汽车创新发展战略》中指出&#xff1a;汽车产业与相关产业全面融合&a…

(二十四)深入理解蓝牙BLE之“H5协议”

前言&#xff1a;蓝牙产品在实际落地中&#xff0c;很多时候采用hostcontroller的通信模型&#xff0c;其中host负责实现协议栈profile是运行在主控cpu上的。controller为另外一颗单独的蓝牙芯片&#xff0c;负责蓝牙link layer的处理&#xff0c;两个芯片通过hci消息来交互数据…

SD卡提示格式化后怎么办?可尝试这种数据恢复方法快速找回!

生活中&#xff0c;虽然我们更习惯用手机、U盘来存储数据&#xff0c;但是对于摄影爱好者&#xff0c;SD卡还是非常刚需。 在使用SD卡存储文件时&#xff0c;经常遇到SD卡无法读取&#xff0c;要求我们格式化后才可以使用。此时&#xff0c;该如何备份里面的数据&#xff0c;或…

IB课程为何号称全球最难国际课程?

在读国际学校的同学们&#xff0c;一定对大名鼎鼎的IB课程不陌生&#xff0c;可是他为什么被称作是它号称最难的国际课程呢&#xff1f;今天就来给大家全面解析一下IB课程&#xff5e; IB课程最开始是IBO为外交官子女开设全球统一标准的课程。IB课程为全球学生开设从幼儿园到大…

【论文速递】TMM2023 - FECANet:用特征增强的上下文感知网络增强小样本语义分割

【论文速递】TMM2023 - FECANet:用特征增强的上下文感知网络增强小样本语义分割 【论文原文】&#xff1a;FECANet: Boosting Few-Shot Semantic Segmentation with Feature-Enhanced Context-Aware Network 获取地址&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.js…

这款小巧精致的 Keychron K7 满足了我对键盘的所有想象

&#x1f53d; 前言 博主是一个“练习”时长两年半的前端码农&#xff0c;在练习期间打交道最多的就是键盘&#xff0c;敲得多了懂得也就多了对键盘的要求也变多了。 之前认为&#xff0c;不就一块键盘嘛&#xff0c;能打字就行。 现在认为&#xff0c;键盘必须要有好的手感&a…

Vue前端基于模板实现word导出功能

目录一、依赖二、模板三、代码一、依赖 // 核心依赖 cnpm i docxtemplater3.32.5 cnpm i file-saver2.0.5 cnpm i jszip-utils0.1.0 cnpm i pizzip3.1.3// ui cnpm i element-ui2.15.8二、模板 public 下新建 test.docx 三、代码 <template><div><el-form …

Maven依赖冲突

An attempt was made to call a method that does not exist 依赖冲突完整报错如下 Description:An attempt was made to call a method that does not exist. The attempt was made from the following location:com.baomidou.mybatisplus.extension.plugins.inner.Paginati…

Springboot抑郁症测试系统的设计与实现

在各大医院的教学过程中&#xff0c;用户的抑郁症测试是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及&#xff0c;“基于网络的学习模式”正悄无声息的改变着传统的抑郁症测试系统&#xff0c;“在线视频、案例展示”的研究和设计也成为教育技术领域的热点课题…

Spring-IOC相关内容

Spring-IOC相关内容 4&#xff0c;IOC相关内容 4.1 bean基础配置 对于bean的配置中&#xff0c;主要会讲解bean基础配置,bean的别名配置,bean的作用范围配置(重点),这三部分内容&#xff1a; 4.1.1 bean基础配置(id与class) 对于bean的基础配置&#xff0c;在前面的案例中…

Chapter2:ROS基础

ROS1{\rm ROS1}ROS1的基础及应用&#xff0c;基于古月的课&#xff0c;各位可以去看&#xff0c;基于hawkbot{\rm hawkbot}hawkbot机器人进行实际操作。 ROS{\rm ROS}ROS版本&#xff1a;ROS1{\rm ROS1}ROS1的Melodic{\rm Melodic}Melodic&#xff1b;实际机器人&#xff1a;Ha…

Magisk内部实现原理

Android10以后&#xff0c;Android系统限制了System分区的修改&#xff0c;结果就是&#xff0c;即使你i是自己编译的Android系统&#xff0c;即使是有做高的root权限&#xff0c;你依然无法挂载System分区并对其内容进行修改,尽管网上有各种帖子说可以使用mount -o rw,remount…

SpringBoot+Vue项目企业客户管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…