《C++ primer plus》摘抄总结,方便查阅回忆
cout
输出
- 输出单字符:cout.put( ch );
- 输出字符串:cout.write( const char_type* s);
- 输出指定个数字符串:cout.write(const char_type* s, int cnt);
格式化输出
-
进制(设置后永久生效) 十进制:cout << dec << endl; 十六进制:cout << hex << endl; 八进制:cout << oct << endl; -
字段宽度(右对齐,设置后一次有效,填充字符默认空格) int width(int i); cout.width( i ); -
设置填充字符(设置后永久生效) cout.fill( ‘*’ ); -
设置浮点数的显示精度(设置后永久生效) cout.precision( int i); -
打印末尾的0和小数点 cout.setf(ios_base::showpoint); -
fmtflags setf(fmtflags ); 解析:第一个setf( )原型参数是一个fmtflags值,指出要设置哪一位。返回值是类型为fmtflags的数字,指出所有标记以前的设置。 格式常量
常量 | 含义 |
---|
ios_base::boolalpha | 输入和输出bool值,可以为true或false | ios_base::showbase | 对于输出,使用C++基数前缀(0,0x) | ios_base::showpoint | 显示末尾的小数点 | ios_base::uppercase | 对于16进制输出,使用大写字母,E表示法 | ios_base::showpos | 在正数前面加上+ |
- fmtflags setf(long, long);
解析:第二个setf( )原型接受两个参数,并返回以前的设置 格式常量 第二个参数 第一个参数 含 义 – ios_base ::basefield ios_base ::dec 使用基数10 ios_base ::oct 使用基数8 ios_base ::hex 使用基数16 – ios_base ::floatfield ios_base ::fixed 使用定点计数法 ios_base ::scientific 使用科学计数法 – ios_base ::adjustfield ios_base ::left 使用左对齐 ios_base ::right 使用右对齐 ios_base ::internal 符号或基数前缀左对齐,值右对齐
标准控制符(比setf格式化更友好的方法,可以直接输出)
示例:cout << left << fixed; //同时打开左对齐和定点选项
其他控制符
控制符 | 调用(与setf对应操作) |
---|
boolalpha | setf(ios_base::boolalpha) | noboolalpha | unsetf(ios_base::boolalpha) | showbase | setf(ios_base::showbase) | noshowbase | unsetf(ios_base::showbase) | showpoint | setf(ios_base::showpoint) | noshowpoint | unsetf(ios_base::showpoint) | showpos | setf(ios_base::showpos) | noshowpos | unsetf(ios_base::showpos) | uppercase | setf(ios_base::uppercase) | nouppercase | unsetf(ios_base::uppercase) | internal | setf(ios_base::internal, ios_base::adjustfield) | left | setf(ios_base::left, ios_base::adjustfield) | right | setf(ios_base::right, ios_base::adjustfield) | dec | setf(ios_base::dec, ios_base::field) | hex | setf(ios_base::hex, ios_base::field) | oct | setf(ios_base::oct, ios_base::field) | fixed | setf(ios_base::fixed, ios_base::floatfield) | scientific | setf(ios_base::scientific, ios_base::floatfield) |
setfill(char) //cout << setfill(’*’) << setw(int) //cout << setw(5) << setprecision(int) //cout << setprecision(6) <<
cin
cin >> (抽取方式,只提取一般输入)检查输入的方法介绍:
不同版本的抽取运算符查看输入流的方法是相同的。 它们跳过空白(空格、换行符和制表符),直到遇到非空白字符。 在单字符模式下,>>运算符将读取该字符,将它放置到指定的位置。 在其他模式下,>>运算符将读取一个指定类型的数据。 也就是说,它读取从非空白字符开始,到与目标类型不匹配的第一个字符之间的全部内容。
输入
- 单字符输入
(1)成员函数:get(char & ) cin.get( ch ); 遇到结尾时,cin.get(ch) == false (2)成员函数:get(void) ch = cin.get( ); 遇到结尾时, cin.get( )== EOF - 抽取运算符 >> 与 get( )的使用区分
如果希望跳过空白,选择 >> 如果希望处理每一个字符,选get( ) - 字符串输入
字符串输入成员:
istream & get(char *, int, char);
istream & get(char *, int);
istream & getline(char *, int, char);
istream & getline(char *, int);
argument1: 于放置输入字符串的内存单元的地址 argument2: 比要读取的最大字符数大1(额外的一个字符用于存储结尾的空字符,以便将输入存储为一个字符串) argument3: 指定用作分界符的字符。(换行符) 上述函数都在读取最大数目的字符或遇到换行符后为止。
- 其他istream方法
read()、peek()、gcount()、putback() - read( )函数读取指定数目的字节,并将它们存储在指定的位置中。
与getline( )和get( )不同的是,read( )不会在输入后加上空值字符,因此不能将输入转换为字符串。read( )方法不是专为键盘输入设计的,它最常与ostream write( )函数结合使用,来完成文件输入和输出。 - peek( )函数返回输入中的下一个字符,但不抽取输入流中的字符。也就是说,它使得能够查看下一个字符。假设要读取输入,直到遇到换行符或句点,则可以用peek( )查看输入流中的下一个字符,以此来判断
是否继续读取。 - gcount( )方法返回最后一个非格式化抽取方法读取的字符数。(字符是由get( )、getline( )、ignore( )或read( )方法读取的)
- putback( )函数将一个字符插入到输入字符串中,被插入的字符将是下一条输入语句读取的第一个字符。
putback( )允许将字符放到不是刚才读取的位置(不同istream)。
流状态
cin.clear( );
cin.clear(eofbit);
cin.setstate(eofbit);
- 读取状态
(暂时不明白用途)
文件I/O
写入步骤:
- 创建一个ofstream对象来管理输出流;
- 将该对象与特定的文件关联起来;
- 以使用cout的方式使用该对象,唯一的区别是输出将进入文件,而不是屏幕。
读取步骤
- 创建一个ifstream对象来管理输入流;
- 将该对象与特定的文件关联起来;
- 以使用cin的方式使用该对象。
元素解析
- 头文件 <fstream>
- 输出对象 ofstream
- 输入对象 ifstream
#include <fstream>
ofstream fout;
ifstream fin;
fout.open("jar.txt");
fin.open("jar.txt");
fin.is_open()
- 关闭连接(//关闭连接,并不会删除流,等离开作用域,流对象会自动析构)
fout.close();
fin.close();
文件模式
用法: ifstream fin(“bagels”, ios_base::in); ofstream fout(“bagels”, ios_base::out | ios_base::app);
常量 | 含义 |
---|
ios_base::in | 打开文件,以便读取 | ios_base::out | 打开文件,以便写入 | ios_base::ate | 打开文件,并移到文件尾 | ios_base::app | 追加到文件尾 | ios_base::trunc | 如果文件存在,则截短文件 | ios_base::binary | 二进制文件 |
|