2012/2/11 《C++ Primer Plus》第十七章:输入、输出和文件 学习笔记

 《C++ Primer Plus》第十七章学习笔记

 

193:<<操作符,被ostream重载时,被称为插入操作符(insertion operator),而不是左移操作符。

 

194:>>操作符,被istream重载时,被称为抽取操作符(extraction operator),而不是右移操作符。

 

195:如果要输出char指针p的地址,则需要强制转换,(void*)p、(int*)p等都可以。

 

196:其他ostream方法:

          1、ostream& put(char) ,用法:cout.put(‘A’), cout.put(65);

          2、basic_ostream<charT, traits>& write(const char_type* s, streamsize n), 用法:第一个参数为要显示字符串地址,第二个参数指出要显示多少字符,即使超出了字符串边界。

 

197:width()方法只影响接下来显示的一个项目,然后字段宽度将恢复为默认值。默认情况下,cout用空格填充字段中未被使用的部分,可以用fill()成员函数来改变填充字符,例如cout.fill(‘*'),与width()不同,新的填充字符将一直有效,直到更改它为止。

 

198:precision(n)成员函数将有效数字设置为n位,与fill()类似,新的精度设置将一直有效直到被改变为止。

 

199:cout.setf(ios_base::showpoint) 用来打印末尾的0和小数点。

 

200:一个参数的setf()中的一些格式常量:

2012/2/11 《C++ Primer Plus》第十七章:输入、输出和文件 学习笔记_第1张图片

 

两个参数的setf()中的参数:

2012/2/11 《C++ Primer Plus》第十七章:输入、输出和文件 学习笔记_第2张图片

 

201:一些标准控制符:

2012/2/11 《C++ Primer Plus》第十七章:输入、输出和文件 学习笔记_第3张图片

详见:http://www.cplusplus.com/reference/iostream/manipulators/

 

202:

int a;

cin >> a;

若输入123Z,则将读取字符1、2、3,将Z留在输入流当中。

 

203:流状态:

2012/2/11 《C++ Primer Plus》第十七章:输入、输出和文件 学习笔记_第4张图片

 

204:设置流状态有一个非常重要的后果:流将对后面的输入或输出关闭。如果希望程序在流状态位被设置后能够读取后面的输入,就必须将流状态重置为良好,可以通过clear()方法。

 

205:由于历史原因,fail()方法在failbit或eofbit被设置时返回true(前者可能因为输入不匹配,后者因为到达文件尾)。

 

206:

2012/2/11 《C++ Primer Plus》第十七章:输入、输出和文件 学习笔记_第5张图片

 

207:cin.ignore(255,’\n’)将读取并丢弃接下来的255个字符或直到到达第一个换行符。它的原型为:istream& ignore(int = 1, int = EOF)。

 

208:

2012/2/11 《C++ Primer Plus》第十七章:输入、输出和文件 学习笔记_第6张图片

表中的get()缺了考虑读取最大字符数的情况,即:“当前的C++:如果读取了最大数目的字符,且行中还有其它字符,则不设置failbit(和getline不同)”。

 

209:以默认模式打开文件进行输出将自动把文件的长度截短为零,这相当于删除已有的内容。

 

210:较新的C++实现提供了一种更好的检查文件是否被打开的方法——is_open()。

 

211:

2012/2/11 《C++ Primer Plus》第十七章:输入、输出和文件 学习笔记_第7张图片

 

212:对于字符来说,二进制表示与文件表示是一样的,即字符的ASCII码的二进制表示。对于数字来说,二进制表示和文本表示有很大的差别,见下图:

2012/2/11 《C++ Primer Plus》第十七章:输入、输出和文件 学习笔记_第8张图片

 

212:二进制文件简单用法:

#include <iostream>
#include <fstream>
using namespace std;

const int size = 20;

struct planet
{
	char name[size];
	double pop;
	double g;
};

int main()
{
	ofstream fout("out.txt",ios_base::out|ios_base::binary);

	planet p1 = {"Earth",60,10};

	fout.write( (char*)&p1, sizeof p1);
	fout.close();

	ifstream fin("out.txt",ios_base::in|ios_base::binary);

	planet p2;

	fin.read( (char*)&p2, sizeof p2);
	cout << p2.name << " " << p2.pop << " " << p2.g << endl;

	fin.close();

	return 0;
}

 

 

 

书中的错误:

P671 表格第一行少了一个”)”;

P675 表格倒数第三行的”exceptios(isostate ex)”应改为”exceptions(iostate ex)”;

P692 表格倒数4行的开头4个”ios_base::out”均错误。

 

 

 

 

 


 


你可能感兴趣的:(2012/2/11 《C++ Primer Plus》第十七章:输入、输出和文件 学习笔记)