【C++Primer】第8章:IO库

第8章 IO库

image-20211223221319895

8.1 IO类

image-20211223221549178

宽字符版本的类型和函数的名字以一个w开始

目前为止,我们使用过的IO类型和对象都是操纵char数据的

不能拷贝或对IO对象赋值

不能将形参或返回类型设置为流类型

ofstream out1, out2;
out1 = out2;               //错误
ofstream print(ofstream);  //错误
out2 = print(out2);        //错误

条件状态

image-20211223222647534

image-20211223222703695

一个流一旦发生错误,其上后续的IO操作都会失败。只有当一个流处于无错状态时,我们才可以从它读取数据,向它写入数据。

确定一个流对象的状态最简单的方法是将它当做一个条件来使用:

while(cin >> word){
    //...
}

如果badbit、failbit和eofbit任何一个被置位,则检测流状态的条件会失败。

练习8.1:

istream& func(istream& is)
{
	string mm;
	while (is >> mm)
		cout << mm << endl;
	is.clear();//对流进行置位的函数
	return is;
}

int main() {
	istream& is = cin;
	istream& cin = func(is);

	system("pause");
	return 0;
}

image-20211224115427235

管理输出缓冲

每个输出流都管理一个缓冲区,用来保存程序读写的数据。

导致缓冲刷新的原因有很多:

  • 程序正常结束,作为main函数的return操作的一部分,缓冲刷新被执行
  • 缓冲区满时,需要刷新缓冲,而后新的数据才能继续写入缓冲区
  • endl来显示刷新缓冲区
  • 在每个输出操作之后,我们可以用操作符unitbuf设置流的内部状态,来清空缓冲区。默认情况下,对cerr是设置unitbuf的,因此写到cerr的内容都是立即刷新的
  • 一个输出流可能被关联到另一个流。例如,cin和cerr都关联到cout,因此,读cin和写cerr都会导致cout的缓冲区被刷新

endl完成换行并刷新缓冲区

flush刷新缓冲区,但不输出任何额外的字符

ends向缓冲区插入一个空字符

image-20211224152032483

image-20211224152053698

image-20211224152138954

image-20211224152309817

8.2 文件输入输出

更多IO文件操作也可以看博客第五章:https://blog.csdn.net/qq_39236499/article/details/115346546

头文件fstream定义了三个类型来支持文件IO

  • ifstream:从一个给定位文件读取数据
  • ofstream:向一个给定文件写入数据
  • fstream:读写给定文件

image-20211224152930167

例:将文件中的数据写入vector容器

按行写

string infile = "1.txt";   //文件名
vector<string> v;
ifstream in(infile);   
if(in){
    string buf;
    while(getline(in, buf)){
        v.push_back(buf);
    }
}
else{
    cerr << "cannot open this file: " << infile << endl;
}

按单词写

string infile = "1.txt";   //文件名
vector<string> v;
ifstream in(infile);   
if(in){
    string buf;
    while(in >> buf){
        v.push_back(buf);
    }
}
else{
    cerr << "cannot open this file: " << infile << endl;
}

文件模式

image-20211224155057207

易懂版:

image-20211224155815697

8.3 string流

sstream头文件定义了三个类型来支持内存IO

  • istringstream:从string读取数据
  • ostringstream:向string写入数据
  • stringstream:既可以读又可以写

image-20211224160413656

当我们的某些工作是对整行文本进行处理,而其他一些工作是处理行内的单个单词时,通常可以使用istringstream。

当我们逐步构造是输出,希望最后一起打印时,ostringstream是很有用的

小结

  • iostream处理控制台IO

  • fstream处理命名文件IO

  • stringstream完成内存string的IO

  • 类fstream和stringstream都是继承类iostream

  • 输入类都是继承自istream

  • 输出类都是继承自ostream

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 《C Primer》(第5版)是一本C语言的入门教材,对于初学者来说是一本很好的学习资料。它以中文回答了大量的C语言习题,为读者提供了一个循序渐进的学习过程。 这本书有一些优点,首先是适合各种学习条件的读者。无论是想要在大学学习C语言的学生,还是自学编程的初学者,都可以从这本书中受益。其次,书中的内容易于理解。作者采用简明易懂的语言,讲解了C语言的基础知识和编程技巧,帮助读者快速掌握C语言。第三,书中的习题丰富多样,涵盖了从简单到复杂的各个方面。这些习题不仅有助于加深对C语言知识的理解,还可以帮助读者锻炼编程能力。 由于本人无法提供PDF文档,请读者自行查询并下载该书的PDF版本。这本书不仅仅是一个习题集,它还包含了大量的示例代码和案例分析,这些都对读者的学习和实践提供了很好的帮助。 总之,《C Primer》(第5版)是一本很棒的C语言学习资料,读者可以通过习题的练习提高自己的编程能力,掌握C语言的基础知识。希望读者能够借助这本书的帮助,快速地学会C语言编程。 ### 回答2: " C Primer习题集:第5版pdf " 是一本同名教材的习题集,针对C语言编程进行了深入的练习。该习题集的PDF版本可以在网络上进行下载。 这本习题集是为了帮助C语言初学者提高他们的编程技能。它从基础知识开始,逐渐深入到更高级的概念和技术。习题集的节组织结构与原版教材一致,旨在提供一个系统和综合的学习体验。 这本习题集涵盖了许多重要的编程主题,如变量、运算符、控制流程、数组、字符串、指针、结构体和文件。每个节都包含大量的习题,涵盖了不同难度级别的问题。这些习题可帮助学生巩固已学知识,并提供了实践机会以应用所学的概念。 与原版教材相比,该习题集以问题为驱动,需要学生进行自我思考和解答。通过反复实践和解决问题,学生可以更好地理解C语言的概念和技术。 总的来说, C Primer习题集:第5版pdf 提供了一个实践性强、系统性好的学习工具,适合想要提高他们C语言编程技能的人使用。通过完成这些习题,学生可以更深入地理解C语言的各个方面,并在实际项目中应用所学的知识。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zdb呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值