C++_IO类型_文件输入输出流_字符串流

IO类型

  • iostream: 用于窗口的输入输出
  • fstream: 用于文件读写
  • sstream :读写存储在内存中的string对象

注:他们继承于istream与ostream,因此istream对象也可用于读取ifstream, string对象, ostream对象同上; 并且iostream类型可在同一个流实现输入输出操作;.
IO对象不可复制赋值

ofstream out1,out2;
out1=out2;  //不支持
ofstream print(ofstream);//在形参传递过程中涉及到复制操作
out2=print(out2);
//形参或返回类型不能为流类型,如果需要返回或传递IO对象,必须返回或传递该对象的指针或引用
//采用const修饰,那么就在读写过程中就不能改变IO对象状态了,SO,不可用const修饰

IO条件状态
条件状态包含:

  • strm:badbit :被破坏的流
  • strm::failbit: 失败的IO操作
  • strm::eofbit: 指出流已经到达文件结束符
  • clear: 将流中状态值重置为有效值
  • setstate: 添加指定条件(为strm::iostate类型)
    注:前三者都为iostate类型, IO类定义了3个iostate类型的常量值:badbit,failbit,eofbit

所有流对象都包含一个条件状态成员,由setstate,clear(添加IO条件,将某个条件状态设置为有效值)操作管理;该状态成员为iostate类型,以二进制(bit)形式使用.
流的状态由bad,fail,eof,good操作提示,流正确时bad,fail,eof返回 false,good返回true
例:流状态的查询与控制

int i;
while(cin>>i,!cin.eof()){if(cin.bad)throw runtime_error("流被破坏");if(cin.fail){cerr<<"数据错误,重试";cin.clear(istream::failbit);continue;}
}

当同时使用多个状态时可采用直接或运算(满足条件的二进制位都变为1)

i.setstate(ifstream::badbit|ifstream::failbit);
//同时将开启流状态成员

输入输出缓冲区管理
每个IO对象都具有一个缓冲区,用于储存程序读写数据
如下操作导致缓冲区内容被刷新

  • 程序正常结束
  • 缓冲区已经存满
  • 使用操作符显示刷新缓冲区,例:endl,flush
  • 输入操作完成,用unitbuf操作符设置流内部状态
  • 将输入输出流关联,在读取时将刷新关联的输出缓冲区

注:unitbuf用于刷新所有输出,当程序不正常结束,不会刷新缓冲区,系统不会在程序崩溃时自动刷新缓冲区
输入输出关联
IO对象具有tie函数,用法如下:

cin.tie(&cout);//cin的任何操作都会刷新关联的缓冲区
ostream *old_tie=cin.tie();
cin.tie(0);//形参为0打破二者的绑定
cin.tie(old_tie);//重新关联

文件输入流与输出流

  • ofstream: 输出文件流,创建文件并向文件写入信息
  • ifstream:输入文件流,从文件读取信息
  • fstream:同时具有ofstream与ifsteam的功能

文件操作时,C++源代码必须包含< iostream> < fstream>
打开文件
void open(const char *filename,ios::openmode mode);
第一个参数文件位置及文件名,第二个参数打开类型; open是文件流对象的成员函数
mode具有如下:

  • ios::app :在文件末尾添加内容
  • ios::ate :文件打开后定向到末尾
  • ios::in :打开文件用于读取
  • ios::out :打开文件用于输入
  • ios:trunc :打开文件清空已存在的文件流(我的理解是覆盖以前文件内容,有不对的地方还请指出)

以上介绍的标志可以结合使用,out,trunc,app只能用于指定与ofstream或fstream对象关联的文件,默认打开形式只有in,out

ofstream outfile;
outfile.open("data.txt",ios::in|ios::trunc);
//或者
fstream file; //fstream对象默认打开方式为in和out同时打开
file.open("data.txt",ios::in|ios::out);

关闭文件: 流对象.close();
写入文件: 流插入运算符(<<)
读取文件: 流提取符(>>)
实例操作:

#include<iostream>
#include<fstream> 
using namespace std;
int main(){char data[100];ofstream outfile;outfile.open("记录.txt",ios::app); //此处可做修改cin.getline(data,100);//接受一个字符串,可以接收空格,将其存储到数组中,最大存储99个字符outfile<<data;outfile.close();ifstream infile;infile.open("记录.txt");infile>>data;cout<<data<<endl; infile.close();return 0; 
} 

字符串流

标准库定义三种类型字符串流

  • istringstream: istream派生,提供读string
  • ostringstream: ostream派生,提供写string
  • stringstream: iostream派生,提供读写
    注:必须包含sstream头文件

stringstream的特定操作

  • stringstream strm: 创建对象
  • stringstream strm(s): 用string对象s初始化strm;
  • strm.str(): 返回strm中存储的string类型对象
  • strm.str(s): 将s复制给strm,返回void

ostringstream可用于格式转换
istringstream自动将数值类型的字符转化为相应数值

int i=1,j=2;
ostringstream s1;
s1<<i<<"i"<<j<<"j";//现在str内存储的是"12"的字符串
istringstream s2(s1.str());//用s1初始化s2
string dump;
s2>>i>>dump>>j>>dump;//接收分割效果的字符串,必须保证存储操作与读取操作格式一致
cout<<i<<j;

注:上述操作中注意需要将string对象分割才能得到,空白符与换行符会被忽略

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

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

相关文章

python网络编程证书_python 网络编程——客户端

网络通信的基本接口是socket&#xff0c;它扩展了操作系统的基本I/O到网络网络通信。socket可以通过socket()函数来建立&#xff0c;通过connect()函数来连接。得到了socket&#xff0c;可以确定本地和远程端点的IP地址和端口号。socket对不同的协议来说都是一种通用的接口&…

AC日记——集合位置 洛谷 P1491

集合位置 思路&#xff1a; 次短路&#xff1b; 先走一遍最短路&#xff1b; 记录最短路径&#xff0c;然后依次删边走最短路&#xff1b; 最短的长度就是次短路&#xff1b; 来&#xff0c;上代码&#xff1a; #include <queue> #include <cmath> #include <cs…

Kconfig中的“depends on”和“select”

在Kconfig文件中&#xff1a; config Adepends on Bselect C它的含义是&#xff1a;CONFIG_A配置与否&#xff0c;取决于CONFIG_B是否配置。一旦CONFIG_A配置了&#xff0c;CONFIG_C也自动配置了。 参考资料&#xff1a;“select” vs “depends” in kernel Kconfig。 所以去…

C++_虚继承_虚函数_纯虚函数(多继承的二义性,多态)

基本信息 每一个类都有一个虚表,以及虚表指针; 虚表的内容是编译器决定的,虚表中用于存放虚函数的指针, 程序运行时的类型信息等; 每个多态对象都存放着一个指向当前类型的虚表的指针, 该指针在构造函数中被赋值, 一般来说当调用当前这个类的构造函数, 则虚表指针就指向当前类…

数组的合并和升序排列_leetcode 33 搜索旋转排序数组

给你一个升序排列的整数数组 nums &#xff0c;和一个整数 target 。假设按照升序排序的数组在预先未知的某个点上进行了旋转。&#xff08;例如&#xff0c;数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] &#xff09;。请你在数组中搜索 target &#xff0c;如果数组中存在…

[LeetCode] [C++] 206 Reverse Linked List 反转单项链表

题目要求 Reverse a singly linked list.LeetCode 206在线测试 问题描述 给定一个单项链表&#xff0c;将其反转后返回链表头节点。 思路分析1 可以完整的遍历一遍链表&#xff0c;将链表的每个节点的值存在数组中&#xff0c;然后反向遍历数组重新生存一个新 链表。这样做需要…

defconfig、 .config

最近在裁剪内核慢慢关注这个问题 defconfig、 .config defconfig 一般在arch/arm64/configs/目录下&#xff0c;是一个简单的内核配置&#xff0c;是没有展开的。 .config一般是用来执行make menuconfig的基础配置 从.config到defcong不是简单的复制操作&#xff0c;而是mak…

递归过程中语句执行顺序

递归的两种模式 模式一 //递归的过程中在"递"的过程中解决问题 function function_name(Max_argument){if(end_condition){end;}else{solve;function_name(Min_argument);//问题规模逐渐减小} } 注:位于递归函数前的语句和函数具有顺序性 模式二 //递归的过程中…

qq面板(仿版,未完待续中。。。。)---2017-04-24

主要实现效果&#xff1a; 1、点击对话&#xff0c;显示对话&#xff1b;点击联系人&#xff0c;显示联系人 2、在联系人界面&#xff1a; 实现好友列表的展开与折叠&#xff1b;&#xff08;图12&#xff09; 实现鼠标移到好友列表上的背景颜色的变化&#xff1b;&#xff08;…

苹果企业证书_苹果签名经常掉签原因大汇总

苹果签名就是数字签名&#xff0c;是基于非对称加密算法来实现的&#xff0c;对称加密就是通过非对称加密算法实现的&#xff0c;对称加密是通过同一份秘钥加密解密数据&#xff0c;非对称加密有两份秘钥&#xff0c;分别是公钥和私钥&#xff0c;用公钥进行加密的数据只能使用…

漫画|Linux 并发、竞态、互斥锁、自旋锁、信号量都是什么鬼?

1. 锁的由来&#xff1f;学习linux的时候&#xff0c;肯定会遇到各种和锁相关的知识&#xff0c;有时候自己学好了一点&#xff0c;感觉半桶水的自己已经可以华山论剑了&#xff0c;又突然冒出一个新的知识点&#xff0c;我看到新知识点的时候&#xff0c;有时间也是一脸的懵逼…

C++_顺序容器

顺序容器类型 顺序容器 vector: 支持快速随机访问list: 支持快速插入与删除deque: 双端队列 顺序适配器 - stack: 后进先出(LIFO)堆栈 - queue: 先进先出(FIFO)队列 - priority_queue: 有优先级管理的队列 上述顺序容器包含于以下头文件中:< vector >,< list &…

python画tan_Python入门之三角函数tan()函数实例详解

描述tan() 返回x弧度的正弦值。语法以下是 tan() 方法的语法:import mathmath.tan(x)注意&#xff1a;tan()是不能直接访问的&#xff0c;需要导入 math 模块&#xff0c;然后通过 math 静态对象调用该方法。参数x -- 一个数值。返回值返回x弧度的正弦值&#xff0c;数值在 -1 …

课程作业一

由于代码的难点部分是王源写的。。所以开始我选择了重写。。但是重写好像比我想象的复杂太多&#xff0c;加上时间分配不够所以现在还没有完成。。先提交随笔写好后补上代码。。我道歉认罚。。把这次当成一个教训。。 转载于:https://www.cnblogs.com/daydreams/p/6759372.html…

不废话~就是抽奖~

不废话就是抽奖 在公众号回复-抽奖- 获取抽奖二维码参与抽奖

C++关联容器总结一

关联容器 关联容器: 通过键(key)储存与读取元素 顺序容器: 通过元素在容器中的位置顺序储存,访问 关联容器类型 map 关联数组&#xff1a;元素通过键来存储和读取 set 大小可变的集合&#xff0c;支持通过键实现的快速读取, 具有集合的性质 multimap 支持同一个键多次出现…

威纶触摸屏与电脑连接_PLC与这7种设备的连接方式,一看就懂!

点击上方电工小青年&#xff0c;关注并星标专业的电工电气领域自媒体&#xff0c;不容错过欢迎转发朋友圈~PLC常见的输入设备有按钮、行程开关、接近开关、转换开关、拨码器、各种传感器等&#xff0c;输出设备有继电器、接触器、电磁阀等。正确地连接输入和输出电路&#xff0…

okHttp源码解析------待续

看该篇文章前首先要熟悉okHttp的使用&#xff0c;建议先读OkHttp的简单使用 本文的源码解析参考链接&#xff1a;okhttp3总和解析 1.从URL请求处理开始分析 由异步将请求加入调度方法开始引入正题&#xff1a; getClient().newCall(request).enqueue(new Callback() {Overridep…

Android studio JNI jni实例

1.Jni的作用 1.Jni的作用 Java是一种比较高级的语言&#xff0c;Java调用c库&#xff0c;调用c库是必不可少的&#xff0c;所以Jni就应运而生了。看了这个文章的同学&#xff0c;应该能够自己写个APK装在自己的手机里面吧&#xff0c;以前刚开始做android的时候&#xff0c;写…

二叉树先序遍历,中序遍历,后序遍历,层次遍历学习总结及完整C/C++代码

伪代码阐述 先序遍历 先序遍历:先访问根节点, 然后深入左子树,直到不能深入时再深入右子树 由定义可得递归式 void travPre_R(BinNodePosi* x,VISIT& visit){if(!X) return; //到达叶子节点,开始回归visit(x->data);//向左子树深入的过程中便开始进行对每个节点的数据…