【读书笔记】《C++Primer》第八章 IO库

  1. IO类型间的关系

 

  IO分三大类:文件以及字符串,它们分别对应iostream、 fstream、 sstr-eam三个头文件。通过继承机制,后两者的很多函数的使用方法都可以直接套用iostream的,比如:ifstream和istringstream都继承自istream,我们就可以像使用cin一样使用ifstream和istringsteam对象。

 

  1. IO对象无拷贝或赋值

 

  IO对象无法被拷贝,所以我们也不能将返回类型和形参设为流形式。另外,由于IO对象的状态在读写时会改变状态,所以我们也不能对其指针形参用const限定。

 

  1. 条件状态

 

  IO类定义了条件状态供我们访问和检查。其中,badbit置位表示系统错误,无法恢复;failbit置位表示有错误发生,可以恢复;eofbit置位表示流到达了文件结束;而goodbit则用来指出流未处于错误状态,此值保证为0。

 

  另外,不要直接访问这些参数,用IO类提供的eof()fail()bad()good()函数来检查。

 

  通常我们都用rdstate()来得到流的当前状态,而用clear()将所有条件状态复位。至于clear(flags)setstate(flasgs)则分别表示恢复flags的条件状态和将flags条件状态位置位。

 

  1. 缓冲

 

  我们只需要记住三点:

  • cout<<"hi"<<endl表示输出“hi”和一个换行(line),然后刷新缓冲区

  • cout<<"hi"<<flush表示输出“hi”,然后刷新缓冲区

  • cout<<"hi"<<ends表示输出“hi”和一个空格(space),然后刷新缓冲区

 

  1. 文件输入输出

 

  动手实践了一个例子:

 

 1 #include <fstream>
 2 #include <iostream>
 3 #include <string>
 4 
 5 using namespace std;
 6 
 7 /*一个简单的文件输入输出程序:将当前文件夹中的
 8 hint.txt中的内容传到tnih.txt中。*/
 9 int
10 main()
11 {
12     string s;
13     string m = "";
14     ifstream inputF("hint.txt");
15     ofstream outputF("tnih.txt");
16     
17     while (inputF >> s)
18         m += s + " ";
19     outputF << m << endl;
20     inputF.close();
21     outputF.close();
22 
23 }

 

其中,我碰到的问题如下:

  • std::ifstream>>std::string等流与string传递的使用得不到支持

  • 源文件只能输出一单词到目标文件

 

  上网后发现,关于流文件和string对象传值的操作定义在string头文件里,不过联想到sstream头文件,这样做也便无可厚非,所以为了方便,我加上了string头文件。

 

  然后关于输出内容不完整的问题,想了下发现原来在以字符串为媒介传值时源文件会将内容按空格等符号分割成多个字符串,所以我用一个while循环将源文件全部传到m里面,并且补完了因分割而丢掉的空格。

 

  1. string流

 

  哎,这个真的没什么好说的了,正如我在1里面提到的,因为它们继承机制的原因,使用方法都大同小异。

转载于:https://www.cnblogs.com/GShell-Hzn/p/7184108.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值