c++ IO库

文章详细介绍了C++中的基本输入输出操作,包括iostream库的使用,cin和cout的函数,endl和getline的差异,以及如何管理流状态。此外,还涵盖了文件输入输出的fstream类和字符串流sstream的使用方法。
摘要由CSDN通过智能技术生成

作为一个写了挺久代码的人,到现在也只会用cout,cin实在是感到惭愧,况且找工作考算法也会用到很多输入输出,所以就干脆把c++的IO操作整理一下。

基础输入输出:

iostream库:包含两个基础类型istream和ostream,分别表示输出流和输入流,这里的一个流就是一个字符序列,从IO设备读出或写入的,注意这个意思是随着时间推移。字符串会顺序生成或消耗

两个基本的标准输入输出:cin -istream类型,cout -ostream类型

in/out是相对于你的程序来说的

使用例子:

cout :第一行<<运算符接收两个运算对象,左侧必须是ostream,右侧是要打印的值,并返回左侧对象本身,达到链式编程的目的,第一行等价于:

endl是一个操纵符,结束当前行,并将设备关联的缓冲区内容刷入设备中。

cin: 输入运算符同输出,接收左侧istream对象,一个右侧对象。从给定的istream读入数据,存入给定对象,返回左侧对象。

以上输入输出都会以空格或者换行为分割读取,也就是我们不会读取到空格,但有时我们希望能保留空格,这时应该用到getline替代>>运算符。注意getline也会读取输入中的换行符,但是不会读到字符串里。并且getline在读到文件末尾会返回空字符串,可以作为判断是否继续读文件的循环判断。

getline示例:

IO类

注意:IO类对象不能进行拷贝或者赋值

io条件状态:一般用的比较多的就是s.sof()读到末尾了就返回true;

以上的状态为会在某些条件时置位,一个流一旦发生错误,其后续IO操作都会失败。只有当一个六处于无错状态才可读取写入数据,在使用一个流之前应该检查状态,确定流对象状态最简单的方法就是将它当作一个条件使用:

管理条件状态:

流对象的rdstate成员函数会返回一个iostate值,会反映当前流状态,setstate会将给定条件位置位。

clear成员有两个版本,一个带参数拎一个不带,接受的参数时iostate;不带参数的复位所有错误标志位,或者这样用:(使用场景我还没遇到过,就写写么多吧)

输出缓冲区管理:

每个输出流都管理一个缓冲区,用来保存程序读写的数据,文本串可能立即打印或者被保存在缓冲区中,这可以帮助我们减少io操作次数,一次打印多次写入的内容。

导致缓冲刷新的原因:

  1. 程序正常结束,作为main函数return操作的一部分被执行

  1. 缓冲区满

  1. endl等显式刷新

  1. 每个输出操作的unitbuf操纵符

  1. 被关联的流读写

刷新输出缓冲区方式: endl 换行并刷新, flush刷新, ends;

unitbuf操纵符:

文件输入输出

头文件ftream定义了三个类型:ifstream,、ofstream、fstream

这些类型都以用cin,cout,getline来读写文件;

除了继承自iostream类型的行为之外fstream还新增了一些方法,可以对fstream, ifstream, ofstream调用。但不能对其他IO类型调用。

文件流对象使用:

读写一个文件时,可以定义一个文件流对象,并将对象与之关联,open成员函数打开文件,若给出文件名则自动调用;

fstream对象可以作为参数传递给iostream&对象

成员函数open和close:

string流

sstream头文件定义了三个类型支持,istringstream, ostringstream,stringstream

istringstream使用范例:

文件:

ostringstream

扩展:在使用cin读取文件后,你的换行符会留在输入流中,如果使用getline,get这种行操作,会失效,具体看下面链接;

(28条消息) C++输入时对换行的处理_c++换行输入___乔木的博客-CSDN博客

1、getline读取换行符 并且将换行符替换成'\0',并且会丢弃换行符

2、cin会把换行符留在输入队列中

3、cin.getline读取换行符并替换成'\0',并且不会主动丢弃换行符,会把它留在输入队列中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值