C++primer学习笔记及作业答案之第八章

笔记:

8.1 IO类

IO对象无拷贝或赋值。因此不能将形参或返回类型设置为流类型,通常以引用方式传递和返回流。且不能是const的。

将流的状态作为条件判断时,如while(cin >> i),当遇到了文件结束符,或者遇到了IO流错误,或者读入了无效数据时,循环便会终止。

当一个输入流被关联到一个输出流时,任何试图从输入读取数据的操作都会先刷新关联的输出流。标准库将cout和cin关联在一起。

8.2 文件输入输出

以out模式打开文件会丢弃已有数据,每次调用open都会确定文件模式。

调用close后才可以diaoyongopen打开另一个文件。

8.3 string流

重复使用字符串流时,每次都要调用clear

 

课后习题:

练习 8.1:编写函数,接受一个istream &参数,返回值类型也是istream &.此函数须从给定流中读取数据, 直至遇到文件结束标识时停止。它将读取的数据打印在标准输出上。完成这些操作后,在返回流之前,对流进行复位,使其处于有效状态。

//练习 8.1
#include <iostream>
#include <stdexcept>

using namespace std;

istream & read(istream & is)
{
	int val;
	while (is >> val, !is.eof())  //直到遇见文件结束符才停止读取
	{
		if (is.bad())        //输入流已经奔溃了
		{
			throw runtime_error("IO流错误");
		} 
		if (is.fail())       //输入流发生错误,比如输入了字符,输入double类型也会引发错误,但是仍然能输出
		{ 
			cerr << "数据错误,请重试:" << endl;
			is.clear();
			is.ignore(100, '\n');
			continue;
		}
		cout << val << endl;
	}
	is.clear();
	return is;
}

int main()
{
	cout << "请输入一些整数,按Ctrl+Z结束" << endl;
	read(cin);

	system("pause");
	return 0;
}

练习 8.2:测试函数,调用参数为cin。

答:见上。

练习 8.3:什么情况下,下面的while 循环会终止?

while (cin >> i) /* ... */

答:遇到了文件结束符,或者遇到了IO流错误,或者读入了无效数据。

练习 8.4:编写函数,以读模式打开一个文件,将其内容读入到一个string 的vector中,将每一行作为一个独立的元素存于vector 中。

//练习 8.4

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

int main()
{
	ifstream in("data"); //打开文件
    //相当于检查in的状态
	if (!in)
	{
		//cerr在iostream中定义
		cerr << "无法打开输入文件" << endl;
		return -1;
	}
	string line;
	vector<string> words;
	while (getline(in, line))    //从文件中读取一行
	{
		words.push_bac
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值