《C++ Primer Plus》学习笔记11
第17章 输入、输出和文件
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
主要内容:
1)C++角度的输入和输出
2)iostream类系列
3)重定向
4)ostream类方法
5)格式化输出
6)istream类方法
7)流状态
8)文件I/O
9)使用ifstream类从文件输入
10)使用ofstream类输出到文件
11)使用fstream类进行文件输入和输出
12)命令行处理
13)二进制文件
14)随机文件访问
15)内核格式化
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
1、使用cout进行输出
1)cout
cout << value;
//原型:ostream & operator<< (int)
2)其他ostream的方法:
put()方法 ——用于显示字符
原型:ostream & put(char);
cout.put(‘W‘); //显示w字母,cout是调用方法的对象,put()是类成员
cout.put(‘i‘).put(‘t‘); //拼接输出
//在原型合适的情况下,可以将数值型参数用于put(),让函数原型自动将参数转化为蒸汽的char值
cout.put(65); //将65转化为char,显示
cout.put(66.3); //将double值66.3转化为char值66,并显示对于字符
3)write()方法 ——用于显示字符串
原型:basic_ostream<char T, traits>& write(const char_type* s, streamsize n);
第一个参数提供了要显示的字符串地址,第二个参数指出要显示多少个字符
注意:write方法不会在遇到空字符时自动停止打印字符,而只是打印指定数目的字符,即使超出了字符串的边界。
4)刷新输出缓冲区
控制符flush刷新缓冲区,而控制符endl刷新缓冲区,并插入一个换行符号
cout << ‘Hello, good-looking! ‘ << flush;
cout << ‘Wait just a moment,please. ‘ << endl;
控制符也是函数,可以直接用flush()来刷新cout缓冲区
flush(cout);
//或者cout << flush;
5)用cout进行格式化
ostream插入操作符将值转为为文本格式,在默认的情况下,格式化值的方式如下:
①对于char值,一个字符显示在宽度为一个字符的字段中
②对于数值整型,以十进制的方式显示在一个刚好容纳该数字以及负号的字段里
③字符串被显示在宽度等于该字符串长度的字段中
④浮点型有点变化
新式:浮点类型被显示为6位,末尾的0不显示。
老式:浮点类型被显示带6位小数,末尾的0也不显示
注意显示的位数和数字被存储的精度是没有关系的
⑤修改显示时使用的计数系统
十进制dec,cout默认十进制
十六进制hex控制符
cout << hex;
cout << n;
八进制oct控制符
cout << oct;
cout << n;
⑥调整字段的宽度width
int width();//返回字段宽度的当前设置
int width(int i);//将字段宽度设置为i个空格,并返回以前的字段宽度值
cout.width(12);//记住是右对齐
这里需要注意:width()方法只影响接下来显示的一个项目,之后字段宽度将恢复为默认值。例如
int w = cout.width(30);
cout << w;
注意这个时候显示字符串时候,字段宽度被设置为30,但是显示w的值时,字段宽度不是30,因为它影响的是接下来被现实的项目,所以显示为0
⑦填充字符
cout.fill(‘*‘);
注意这里与width不一样,它一直有效。
⑧设置浮点度的显示精度
C++默认的位数是6,末尾的0将不显示,precision()成员函数使能够选择其它值。
cout.precision(2);//将精度设置为2,新的精度设置也一直有效
注意:老式C++版本将默认模式的精度解释为小数点后面的位置,新式指的是总位数
cout.precision(2);
20.4 -> 20
2.78889 -> 2.8
⑨打印末尾的0和小数点
cout.setf(ios_base::showpoint); //使得cout显示末尾的小数点,默认精度为6位置
20.04 -> 20.4000
cout.precision(2);
20.40 -> 20.
2.78889 -> 2.8
⑩setf()
控制了小数点被显示时,其他格式的选项
原型一、
fmtflags setf(fmtflags);
cout.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 set(fmtflags, fmtflags);
第一个参数是一个包含了所需要设置fmtflags值,第二个参数指出要清除第一参数的哪些位
setf(long, long)的参数:
第二个参数
ios_base::basefield
对应第一个参数有三个:ios_base::dec(基数10) ios_base::oct (基数8) ios_base::hex (基数16)
第二个参数
ios_base::floatfield
对应第一个参数有两个:ios_base::fixed(使用定点计数法)ios_base::scientific(使用科学计数法)
补充:C语言中printf()的说明符号,默认的C++模式对应于%g说明符,定点表示法对应于%f的说明符,而科学计数法对应于%e说明符
区分下,三个计数法的区别
默认模式:新式:浮点类型被显示为6位,精度指的是总位数,末尾的0不显示。
定点表示法、科学计数法:精度指的是小数点后面的位数,而不是总位数,显示末尾0
第二个参数
ios_base::adjustfield
对于第一个参数有三个: ios_base::left(左对齐) ios_base::right(右对齐)ios_base::internal (符号或基数前缀左对齐,值右对齐)
补充:
标准控制符
cout << showpoint << fixed << right;
iomanip头文件#include<iomanip>
最常用的3个控制符:
setprecision() 设置精度
setfill() 填充字符
setw() 字段宽度
2、使用cin进行输入
操作符函数原型
istream & operator>> (int &);
cin >> staff_size;
cin
1)输入一个数字
2)接受一个字符串,遇到空格、TAB、回车都结束
cin.get()
1)cin.get(ch)用来接收字符
char ch; cin.get(ch);
2)cin.get(s,n)用来接收一行字符串,可以接收空格 这个类似于getline 可以输入多个单词用空格隔开
char a[20]; cin.get(a,20);
cin.getline()
接受一个字符串,可以接收空格。这个和cin(s,n)都需要注意
char m[20] = jklkjilj;
cin.getline(m,5);
cout << m << endl; //这里输出结果为jklk 因为最后一个字符为‘0’
这就可以知道直接上cin.getline()有三个参数,接收字符串到m,接收个数,结束符(当省去的时候我们就默认为‘\0‘或者‘/n’)
char a[20]; cin.getline(a,5);
getline()
接收一个字符串,可以接收空格并输出,需要包含头文件#include<string>
注意,getline()属于string流,所以只有把字符串定义为string型,我们才可以用,否则只能用istream流的cin.getline(m,20)
gets()
接收一个字符串,可以接收空格并输出,但是需要加上头文件#include<string>
而且需要注意不能写成m = gets();应该为gets(m)
getchar()
接收一个字符,需要有头文件#include<string>
这几需要注意,不能写成getchar(ch);应该写成ch = getchar(); getchar()是C语言的函数,C++也兼容,但是少用。
综上所述,根据我的习惯,C++以后碰到需要输入带空格的字符时用char ch; cin.get(ch)
字符串#include<string> gets(str)
补充:流是进出程序的字节流,缓冲区是内存中的临时存储区域,是程序与文件或其他设备之间的桥梁
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<完结于2014.07.24 23:08