c++输入输出流和文件操作总结

目录

一、c++的输入输出流——>

指的是字节流的数据传送;具有类型安全和可扩展性。

 二、流的出入路径

 三、c++流类库

①概览

②标准输出流:

③标准输入流:

四、文件操作(ascii文件和二进制文件)

 五、字符串流(或称内存流)


一、c++的输入输出流——>

指的是字节流的数据传送;具有类型安全和可扩展性。

从操作系统的角度来看,我们可以将每个输入输出设备都视作一个文件,程序的输入输出即可视为数据在文件—程序间的传输:

输入文件——>程序——>输出文件

对于C++,输入输出包括3方面:

1、标准I/O;(系统指定的标准设备如键盘、显示器)2、文件I/O;(外存,如磁盘)3、串I/O。(内存中指定空间,常用一个字符数组存储各类数据)
​

 二、流的出入路径

可以如下表示:

内存为字节流开辟内存缓冲区,用于存放数据。

反过来说,缓冲区中的数据即为流。

cout<<(cout流或标准输出流) 流路径===》

程序——>输出流——>输出缓冲区——>显示器
(保存于缓冲区时,当①缓冲区满②遇到endl,将数据送出)(\n不会刷新缓冲区,但有时一些编译系统也不过多区分)
​

对于输入的数据,当按下回车键===》

键盘缓冲区——>输入缓冲区,并形成流。

 三、c++流类库

①概览

·stdin(标准输入设备)为参数,使cin与设备关联。(cin流:标准输入流)

·istream(ostream也是)类中重载<<,对不同类型都要分别重载一次。

·cout<<"111"等价于cout.operator<<("111") ,调用的重载是(char *)型-----字符串111的值为其首字节的地址。

·cout将数据插入到cout流,函数返回流对象cout

②标准输出流:

iostream头文件中定义了4种流对象cin,cout,cerr,clog

cerr是标准错误流,输出于标准错误设备(stderr)(区分于正常输出(stdout)),且cerr流中的信息只在显示器输出。它与clog的区别仅有,cerr不经过缓冲区存放、而是直接输出的。

cout.put('a')

输出a;(专门输出单字符,参数为字符或ascii码)

连续调用:cout.put(65).put(66).put('\n');

基本等价于c语言中的putchar();

③标准输入流:

>>通常跳过空格和换行符等;

cin为非0值:输入流在正常状态,提取操作成功;(“文件结束符”:ctrl+Z或+D)

成员函数get:

一、cin.get();返回读入的字符(包括空白字符);若遇到文件结束符,返回EOF(-1).
二、cin.get(ch);读取失败返回0.//前两种用法同C语言中的getchar
三、cin.get(字符数组,字符数n,终止符);读取n-1个字符(!!!);失败返回0.

getline:

cin.getline(字符数组,字符数n,终止符);
​

(上面两个“字符数组”都可替换为字符指针;(存入其指向的数组))

(终止符由自己选定;)

(都读取n-1个字符,末尾加上'\0'。)

【对cin.getline和cin.get说明】:

/cin.getline(arr,20),同样可读取空格,在读取完指定数目字符后或者遇到换行符时,停止读取。如例参数为20,则至多读取19个字符,余下空间存储自动添加在结尾的\0。

/格式类似的,还有cin.get(arr,20),不同的是geline读取并丢弃换行符,而cin.get仅将其留在输入队列中。同样cin也会将回车键生成的换行符留下。一般后面再要输入时,得加一个无参数的cin.get(),读取下一个符号即处理留下的换行符。否则直接输入时会因为检测到换行符而认为已到行尾而不再读取。
 

eof:cin.eof();

若到达文件末尾(遇文件结束符)——>函数值非0。

peek:cin.peek();

观测当前指针所指字符。(之所以能观测下一个,是因为当读取完一个字符,指针已跳到下一个)

putback:cin.putback(ch);

前面用get/getline读取的某一字符ch返回到输入流并插入到当前指针位置。(往后读第一个便能读取)(例如,可用在一个字符数组c,终止后可以继续读取c)

ignore:cin.ignore(n,终止符);

括号内容含义:(跳过输入流中的n个字符,遇到终止符不再跳过)//也可不带参数或带一个。

默认:cin.ignore()==cin.ignore(1,EOF)。

四、文件操作(ascii文件和二进制文件)

(源程序文件.cpp,目标文件.obj,可执行文件.exe,数据文件date file.)

1、根据文件中数据组织形式,将文件分为两类:

ASCII文件/字符文件/文本文件:每个字节放一个ascii码
二进制文件/内部格式文件/字节文件:按在内存中的存储形式原样输出

 字符信息在内存中以ascii码存放,此时二种文件输出时,数据形式一样。

对于数字,则数据形式不同。(ascii为逐字,内部格式为数字值)

 · ascii文件,便于屏幕直接阅读,但存储时转换耗时多,占空间多。

2、文件流:以外存文件为I/O对象的数据流,每个文件流有一个内存缓冲区与之对应。

外存文件输入————>内存————>输出到外存文件

文件流对象需要自己定义;(如定义输出文件流对象:ofstream outfile;)

②调用成员函数open:

outfile.open("f1.dat",ios::out);//文件名可包括路径("c:\new\f1.dat"),后面是输入输出方式,默认是ios::out,可省写
​
​

//以上两步可合并:ofstream outfile("f1.dat",ios::out);——(调用了带参数的构造函数

若打开失败,open返回0;对构造函数,失败时流对象值为0

成员函数close:

outfile.close();——解除该文件与文件流的关联。

outfile<<a[i]....——向关联的磁盘文件输出数据。

exit(1);——应用程序终止并返回状态码1。

再次用不同方式打开一个文件前,先关闭

/对于ascii文件,一字节放一字符,如:一篇英文文章的文本文件。操作就是正常文本读写。

/对二进制文件(内存数据的映像文件/字节文件),打开时要用ios::binary指定。可以作为既能输出又能输入的文件。↓↓↓

3、二进制文件操作

①成员函数write,read:

ofstream outfile("filename",ios::out|ios::binary);//ios::out可省略outfile.write(p,50);
//将字符指针p指向的单元的开始的50个字节的内容,不加转换地写到与outfile关联的磁盘文件中
​

对于ifstream对象,读入50个字节存放在字符指针p所指空间内。

(上面括号内的形参(p处)是字符指针或者字符串的首地址,注意类型匹配!

(abort();——>退出程序,同exit(1).)

两种结构体指针的write方法:
1、for循环
2、outfile.write((char*)&stru[0],sizeof(stru));
//输出数据间不必加空格(靠字节数来控制读入数据)

与位置标记(可以理解为,外存版的指针)有关的成员函数:

gcount()
tellg()/tellp()
seekg(位置)/seekp(位置)
也可用双参数(位移量,参照位置)
参照位置:
ios::beg(默认)
ios::cur
ios::end

 五、字符串流(或称内存流)

字符串流不同于字符数组,可以按其他类型的数据形式读取数据。

向字符数组存入数据前,先将数据从二进制形式转换为ascii码放在缓冲区,后再发送。

从字符数组读取数据时,先将其中的ascii数据送到缓冲区后再发送,转换为二进制形式给程序中变量。

简而言之:
二进制——>输入给变量
ascii——>输出到屏幕

对于文件有文件结束符,对str,需自己指定一个特殊字符为结束标志。

①建立输出字符串流对象(并与字符数组关联)

ostrstream strout(arr,20); //20为缓冲区长度
​

 strout<<ends;  //用操作符ends向流插入一个'\0'。(通常作为字符串结束标志)

转换为ascii代码存入到字符数组。

②建立输入字符串流对象

istrstream strin(arr2,20); //若无20,则全部数据都作为流中内容

③输入输出对象:

strstream io(arr3,n,ios::in|ios::out);

输入字符串流和输出字符串流分别有流位置标记。

输出字符串流从数组首地址开始,会更新其中内容。

存取速度快但有生命周期,一般同main。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业数据可视化-亿发数据化管理平台提供商,实现一站式数字化运营

近些年来&#xff0c;国内企业数据化管理升级进程持续加速&#xff0c;以物联网建设、人工智能、大数据和5G网络等新技术的发展&#xff0c;推动了数字经济的蓬勃发展&#xff0c;成为维持经济持续稳定增长的重要引擎。如今许多国内中小型企业纷纷摒弃传统管理模式&#xff0c;…

Json和Xml

一、前言 学习心得&#xff1a;C# 入门经典第8版书中的第21章《Json和Xml》 二、Xml的介绍 Xml的含义&#xff1a; 可标记性语言&#xff0c;它将数据以一种特别简单文本格式储存。让所有人和几乎所有的计算机都能理解。 XML文件示例&#xff1a; <?xml version"1.…

AGV智能搬运机器人-替代人工工位让物流行业降本增效

在当今快速发展的世界中&#xff0c;物流业面临着巨大的挑战&#xff0c;包括提高效率、降低成本和优化工作流程。为了应对这些挑战&#xff0c;一种新型的自动化设备——智能搬运机器人正在崭露头角。本文将通过一个具体的案例来展示富唯智能转运机器人在实际应用中的价值。 案…

Flask登陆后登陆状态及密码的修改和处理

web/templates/common 是统一布局 登录成功 后flask框架服务器默认由login.html进入仪表盘页面index.html(/),该页面的设置在 (web/controllers/user/index.py)&#xff0c;如果想在 该仪表盘页面 将 用户信息 展示出来&#xff0c;就得想办法先获取到 当前用户的 登陆状态。…

【项目】玩具租赁博客测试报告

目录 一、项目背景 二、项目功能 三、功能测试 一、项目背景 玩具租赁系统采用前后端分离的方法来实现&#xff0c;同时使用了数据库来存储相关的数据&#xff0c;同时将其部署到云服务器上。前端主要有十五个页面构成&#xff1a;用户注册、管理员注册、登录页、用户和管理…

1.倒排索引 2.逻辑斯提回归算法

1.倒排索引 https://help.aliyun.com/zh/open-search/retrieval-engine-edition/introduction-to-inverted-indexes 倒排索引&#xff08;Inverted Index&#xff09;是一种数据结构&#xff0c;用于快速查找包含某个特定词或词语的文档。它主要用于全文搜索引擎等应用&#…

Flask 与微信小程序对接

Flask 与微信小程序的对接 在 web/controllers/api中增建py文件&#xff0c;主要是给微信小程序使用的。 web/controllers/init.py # -*- coding: utf-8 -*- from flask import Blueprint route_api Blueprint( api_page,__name__ )route_api.route("/") def ind…

移动端Vant中的Calendar日历增加显示农历(节日、节气)功能

核心&#xff1a; 使用 js-calendar-converter 库实现 npm地址&#xff1a;js-calendar-converter 内部使用原生calendar.js&#xff0c; 中国农历&#xff08;阴阳历&#xff09;和西元阳历即公历互转JavaScript库&#xff0c;具体实现感兴趣的可自行查看其实现源码。 原日…

ElementUI的Table组件行合并上手指南

ElementUI的Table组件行合并 &#xff0c;示例用官网vue3版的文档 <el-table :data"tableData" :span-method"objectSpanMethod" border style"width: 100%; margin-top: 20px"><el-table-column prop"id" label"ID&qu…

【轻松入门】OpenCV4.8 + QT5.x开发环境搭建

引言 大家好&#xff0c;今天给大家分享一下最新版本OpenCV4.8 QT5 如何一起配置&#xff0c;完成环境搭建的。 下载OpenCV4.8并解压缩 软件版本支持 CMake3.13 或者以上版本 https://cmake.org/ VS2017专业版或者以上版本 QT5.15.2 OpenCV4.8源码包 https://github.com/op…

英语学习软件欧路词典 Eudic mac特点说明

欧路词典 Eudic mac是一款英语学习工具&#xff0c;它包含了丰富的英语词汇、短语和例句&#xff0c;并提供了发音、例句朗读、单词笔记等功能。 欧路词典 Eudic mac软件特点 多语种支持&#xff1a;欧路词典支持多种语言&#xff0c;包括英语、中文、日语、法语等等&#xff…

Havenask 分布式索引构建服务 --Build Service

Havenask 是阿里巴巴智能引擎事业部自研的开源高性能搜索引擎&#xff0c;深度支持了包括淘宝、天猫、菜鸟、高德、饿了么在内几乎整个阿里的搜索业务。本文针对性介绍了 Havenask 分布式索引构建服务——Build Service&#xff0c;主打稳定、快速、易管理&#xff0c;是在线系…

第27关 在K8s集群上使用Helm3部署最新版本v2.10.0的私有镜像仓库Harbor

------> 课程视频同步分享在今日头条和B站 大家好&#xff0c;我是博哥爱运维。 在前面的几十关里面&#xff0c;博哥在k8s上部署服务一直都是用的docker hub上的公有镜像&#xff0c;对于企业服务来说&#xff0c;有些我们是不想把服务镜像放在公网上面的&#xff1b; 同时…

【习题】运行Hello World工程

判断题 1. DevEco Studio是开发HarmonyOS应用的一站式集成开发环境。 正确(True)错误(False) 正确(True) 2. main_pages.json存放页面page路径配置信息。 正确(True)错误(False) 正确(True) 单选题 1. 在stage模型中&#xff0c;下列配置文件属于AppScope文件夹的是&am…

Docker自建私人云盘系统

Docker自建私人云盘系统。 有个人云盘需求的人&#xff0c;主要需求有这几类&#xff1a; 文件同步、分享需要。 照片、视频同步需要&#xff0c;尤其是全家人都是用的同步。 影视观看需要&#xff08;分为家庭内部、家庭外部&#xff09; 搭建个人网站/博客 云端OFFICE需…

【K8S 二进制部署】部署Kurbernetes的网络组件、高可用集群、相关工具

目录 一、K8S的网络类型&#xff1a; 1、K8S中的通信模式&#xff1a; 1.1、、pod内部之间容器与容器之间的通信 1.2、同一个node节点之内&#xff0c;不同pod之间的通信方式&#xff1a; 1.3、不同node节点上的pod之间是如何通信的呢&#xff1f; 2、网络插件一&#xff…

Linux下安装QQ

安装步骤&#xff1a; 1.进入官网&#xff1a;QQ Linux版-轻松做自己 2.选择版本&#xff1a;X86版下载dep 3安装qq 找到qq安装包位置&#xff0c;然后右击在终端打开输入安装命令&#xff0c;然后点击回车 sudo dpkg -i linuxqq_3.2.0-16736_amd64.deb 卸载qq 使用命令…

Windows/Linux环境登入mysql、mysqldump命令等多方式解决方案之简易记录

Windows/Linux环境登入mysql、mysqldump命令等多方式解决方案之简易记录 之前发布过Window方式,这次结合以上主题,完善下Linux相关登入方式过程,纯属做个记录,有需要的朋友可以做个学习参考。 一、Windows环境提示“‘mysql’ 不是内部或外部命令,也不是可运行的程序或批…

Flink项目实战篇 基于Flink的城市交通监控平台(下)

系列文章目录 Flink项目实战篇 基于Flink的城市交通监控平台&#xff08;上&#xff09; Flink项目实战篇 基于Flink的城市交通监控平台&#xff08;下&#xff09; 文章目录 系列文章目录4. 智能实时报警4.1 实时套牌分析4.2 实时危险驾驶分析4.3 出警分析4.4 违法车辆轨迹跟…

PO 发布SAP SProxy->外围系统 WebService

通信概览图 外围系统与PO、SAP的请求响应通信过程大致可以用下图描述 &#xff08;个人整理所得&#xff0c;可能有误&#xff0c;欢迎指正&#xff09; 1. 前期准备 1.1 外围系统提供WebService接口 以A系统的RFC发布WebService接口 RFC发布WebService接口 获取到WSDL地…