本文是对"铁道版"c++一书的知识点总结,如果侵权,请及时告知我,将尽快删去,本文禁止转载
c++的输入和输出
put()函数
输出一个字符
cout.put(‘A’);
get()函数
读入数据时可包括空白字符
cin.get(字符型变量);
从输入流中读取一个字符(包括空白符),赋给字符变量ch。如果读取成功则函数返回非0值,如失败(遇到文件结束符EOF)则函数返回0值
getline()函数
cin.getline(字符数组,字符个数n,终止标志字符)
或
cin.getline(字符指针,字符个数n,终止标志字符)
从输入流读取n-1个字符,赋给指定的字符数组(或字符指针指向的数组),然后插入一个字符串结束标志’\n’,如果在读取n-1个字符之前遇到指定的终止字符,则提前结束读取,然后插入一个字符串结束标志’\n’
使用cin>>可以读取c++标准类型的各类数据(如果经过重载,还可用于输入自定义类型的数据),而用cin.getline()只能用于输入字符型数据
使用cin>>读取数据时以空白字符(包括空格符、制表符、回车符)作为终止标志,而cin.getline()可连续读取一系列字符,包括空格
ignore()函数
cin.ignore(n,终止字符)
ignore()函数功能是跳过输入流中的n个字符(默认个数为1),或在遇到指定的终止字符(默认终止字符为EOF)时提前结束
cin.ignore(10,’t’);跳过输入流中10个字符,或遇到字符‘t’后就不在跳了,但仍会忽略’t’
ignore()函数可以不带参数或只带一个参数
cin.ignore()相当于cin,ignore(1,EOF)
用流成员函数进行输入/输出格式控制
设置状态标志的流成员函数setf()
设置状态标志,即是将某一状态标志位置“1”,可使用setf()函数,其一般格式为:
long ios::setf(long flags)
流成员函数setf()括号中的参数flags是用状态标志指定的,状态标志在类示中被定义成枚举
值,所以在引用这些状态标志时要在前面加上"ios::”。状态标志的作用如下所示:
ios::skipws:跳过输人中的空白符,用于输人。
ios::left:输出数据在本域宽范围内左对齐,用于输出。
ios::right:输出数据在本域宽范围内右对齐,用于输出。
ios::internal:数据的符号位左对齐,数据本身右对齐,符号和数据之间为填充符,用于输出。
ios::dec:设置整数的基数为10,用于输人/输出。
ios::oct:设置整数的基数为8,用于输人/输出。
ios::hex:设置整数的基数为16,用于输人/输出。
ios::showbase:输出整数时显示基数符号(八进制数以0打头,十六进制数以Ox打头),用于
输人/输出。
ios::showpoint:浮点数输出时带有小数点,用于输出。
在以科学表示法格式E和以十六进制输出字母时用大写表示,用于输出。
los::uppercase:
ios::showpos:正整数前显示“+”符号,用于输出
ios::scientific:用科学表示法格式(指数)显示浮点数,用于输出。
ios::fixed:用定点格式(固定小数位数)显示浮点数,用于输出。
ios::unitbuf:完成输出操作后立即刷新所有的流,用于输出。
ios::stdio:完成输出操作后刷新stdout和stderr,用于输出。
使用时,其一般的调用格式为:
流对象.setf(ios::状态标志);
(1)由于状态标志在类ios中被定义成枚举值,所以在引用这些状态标志时要在前面加上ios
(2)在使用setf()函数设置多项标志时,中间应该用或运算符"I',分隔。例如:
cout.seft(ios::showpos|ios::dec|ios:scientific);
清除状态标志的流成员函数unsetf()
清除某一状态标志,即是将某一状态标志位置“0",可使用unseft()函数。它的一般格式为:
long ios::unsetf(long flags)
使用时的调用格式为:
流对象.unsetf(ios::状态标志);
流成员函数unsetf()括号中的参数flags()与流成员函数setf()相同
设置域宽的流成员函数width()
设置域宽的成员函数是width()函数,其常用的格式为:
int ios::width(int n);
此函数用来设置宽为n位。(加上要输出的共n位)
注意:所设置的域宽仅对下一个流输出操作有效,当一次输出操作完成之后,域宽又恢复为
默认域宽0。
设置实数的精度流成员函数precision()
设置显示精度的成员函数的常用格式为:
int ios::precision(int n);
设置实数的精度为n位,在以一般十进制小数形式输出时,n代表有效数字(是n位数字不是小数点后n位,四舍五入)。在以fixed(固定小数位数)形式和scientific(指数)形式输出时,n为小数位数。
填充字符的流成员函数fill()
填充字符的作用:当输出值不满域宽时用填充字符来填充,默认情况下填充字符为空格。所
以,在使用填充字符函数fill()时,必须与width()函数相配合,否则就没有意义。填充字符的成员
函数常用的格式为:
char ios::fill(char(h);
使用预定义的操作符进行输入/输出格式控制
dec:设置整数的基数为10,用于输人/输出。
hex:设置整数的基数为16用于输人/输出。
oct:设置整数的基数为8用于输人/输出
ws:用于在输人时跳过开头的空白符,用于输人。
endl:输出一个换行符并刷新输出流,用于输出
ends:插人一个空字符null,通常用来结束一个字符串,用于输出
flush:刷新一个输出流,用于输出。
setbase(n):设置整数的基数为n(n的取值为0、8、10或16),n的默认值为0,即以十进制形式输出。用于输人/输出。
setfill(c):设置c为填充字符,默认时为空格,用于输出
setprecision(n):设置实数的精度为n位,在以一般十进制小数形式输出时n代表有效数字。
在以fixed(固定小数位数)形式和scientific(指数)形式输出时n为小数位数设置域宽为n,用
于输出。
setw(n):设置域宽为n,用于输出
setiosflags(f):设置由参数f指定的状态标志,用于输人/输出。
resetiosflags(f):终止由参数f指定的状态标志,用于输人/输出。
操作符setiosflags和resetiosflags要带上状态标态才能使用,下面列出了带有常用的状态标志
的操作符setiosflags和resetiosflagso
setiosflags(ios::left):数据按域宽左对齐输出。
setiosflags(ios::right):数据按域宽右对齐输出。
setiosflags(ios::fixed):固定的小数位数显示。
setiosflags(ios::scientific):设置浮点数以科学记数法(即指数形式)显示。
setiosflags(ios::showpos):在正数前添加一个“+”号输出
setiosflags(ios::uppercase):在以科学记数法格式E和以十六进制输出字母时用大写表示。
resetiosflags(f):终止已设置的状态标志,在括号中应指定f的内容。
在进行输人/输出时,操作符被嵌人到输人或输出链中,用来控制输人/输出的格式,而不是
执行输人或输出操作。为了使用带参数的操作符,程序中必须含有下列预编译命令:
#include<iomanip>
使用用户自定义的操作符进行输入/输出格式控制
若为输出流定义操作符函数,则定义形式如下:
ostream &操作符名(ostream &stream)
{
自定义代码
return stream;
}
若为输人流定义操作符函数,则定义形式如下:
istream &操作符名(istream &stream)
{
自定义代码
return stream;
}
#include<iostream>
#include<iomanip>
using namespace std;
ostream &outputl(ostream &stream)
{
stream.setf(ios::left);
stream<<setw(10)<<hex<<setfill('&');
return stream;
int main()
{
cout<<123<<endI;
cout<<output1<<123<<endI;
return 0;
}
文件的打开与关闭
ifstream,ofstream,fstream这3个文件流类都定义在头文件fsream中。
要执行文件的输人/输出,须完成以下几件工作,
- 在程序中包含头文件fstream,由于文件的输人/输出要用到以上3个文件流类,个文件流类都定义在fstream头文件中,所以首先在程序中要包含头文件fstream
- 建立流对象。要以磁盘文件为对象进行输人/输出,必须建立一个文件流类的对象,通过文件流对象将数据从内存输出到磁盘文件,或者通过文件流对象从磁盘文件将数据输人到内存。建立流对象的过程就是定义流类的对象,例如:
ifstream in;
ofstream out;
fstream both;
分别定义了输人流对象in,输出流对象out,输人/输出流对象both,其实,在用标准设备为对象
的输人/输出中,也是要定义对象的,如cin和cout就是流对象。c++就是通过流对象进行输人/
输出的,由于cin、cout已在头文件iostream中事先定义,所以用户不需要自己定义。
- 使用成员函数open()打开文件。也就是使某一指定的磁盘文件与某一已定义的文件流对象建立关联。
- 进行读写操作。在建立(或打开)的文件基础上执行所要求的输人或输出操作。
- 使用close()函数将打开的文件关闭。
open()函数是上述3个流类的成员函数,其原型是在fstream中定义的。在ifstream、ofstream
和fstream类中均有定义,调用成员函数open()一般形式为:
文件流对象.open(文件名,使用方式);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
文本文件的读/写
输入<<、put、write 输出>>、get、getline
二进制文件的读/写
get() put()
read() write()
inf.read(char *buf, int len)
outf.write(const char *buf, int len)第1个参数的数据类型为char*,如果是其他类型的数据,必须进行类型转换
检验文件结束
使用成员函数eof()可以检测到这个结束符,如果该函数的返回值非零,表示到达文件尾,返回值为零,表示未到达文件尾
ifstream ifs;
if(!ifs.eof())
检查该流对象是否为零,为零表示文件结束
if(!ifs)
检查流对象的某些成员函数的返回值是否为零,为零表示文件结束
while(cin.get(ch))
二进制数据文件的随机读/写
类istream提供了3个成员函数来对读指针进行操作:
tellg()返回输入文件读指针的当前位置
seekg(文件中的位置)将输入文件中读指针移到指定的位置
seekg(位移量,参照位置)以参照位置为基准移动若干字节
函数参数中的“文件中的位置"和“位移量"都是long型整数,以字节为单位。“参照位置"可以是下面之一
ios::beg从文件开头计算要移动的字节数
ios::cur从文件指针的当前位置计算要移动字节数
ios::end从文件末尾计算要移动的字节数
类提供了3个成员函数来对写指针进行操作:
tellp()返回输出文件写指针的当前位置
seekp(文件中的位置)将输出文件中写指针移到指定的位置
seekp(位移量,参照位置)以参照位置为基准移动若干字节
这3个成员函数的含义与前面讲过的操作读指针的3个成员函数的含义相似,只是它们用来操作写指针。
函数seekg()和seekp()的第2个参数可以省略,在这种情况下,就是默认ios::beg