首页 理论教育C++程序设计:4个标准流的介绍

C++程序设计:4个标准流的介绍

【摘要】:C++使用流类库定义了4个标准流:cin、cout、cerr、clog。表8.1C++流库的预定义流C++的流通过重载运算符“<<”和“>>”执行输入和输出操作。C++的插入运算符“<<”向输出流发送字符。所以上例等价于以下语句:cout<

C++使用流类库定义了4个标准流:cin、cout、cerr、clog。以实现数据流的输入与输出操作。在程序开始运行时,C++会自动打开这4个流,这些流是C++流类库的预定义流,如表8.1所示。

表8.1 C++流库的预定义流

C++的流通过重载运算符“<<”和“>>”执行输入和输出操作。输入操作是从流中提取一个字符序列,因此运算符“>>”也称为提取运算符。输出操作是向流中插入一个字

符序列,因此运算符“<<”称为插入运算符。

1.cout

cout是与标准输出设备连接的预定义输出流。C++的插入运算符“<<”向输出流发送字符。实际上,位于插入运算符右侧的字符串被存储在“<<”左侧的流中。例如:

cout<<fullname<<":"<<num<<'\n';

cout是数据的目的地,插入运算符“<<”把数据(字符串、数字或任何对象)传送到cout。cout一般连接到标准输出设备,即显示器(默认设备)。

可以把若干个插入运算符放在一个语句中完成几个输出操作。每个插入运算符都返回一个它调用的输出流,因为插入运算符“<<”是从左向右结合的,所以这个返回值被连续传送给每个插入运算符“<<”。所以上例等价于以下语句:

cout<<fullname;

cout<<":";

cout<<num;

cout<<'\n';

2.cin

cin是与标准输入设备连接的预定义输入流,称为源。它从输入流中取出数据,数据从输入提取运算符“>>”处流进程序。为了保留输入数据,输入语句要求有目的地址,即指定数据类型的存储单元,例如:

int num;

cin>>num;

这段代码所进行的操作是:提取运算符“>>”从cin参数中提取一个整型数据存入变量num。cin一般连接到标准输入设备即键盘(默认设备)。

每种内部类型都有内部定义的提取运算符,根据默认定义,内部类型的提取运算符跳过空格,然后为当前的类型读入适当的数据。例如:(www.chuimin.cn)

char name[20];

cin>>name;

如果从键盘输入“smith rose”,则只有“smith”被读取到name中,而“rose”将继续留在输入流缓冲区中,直到下次提取。

与插入运算符一样,也可以把多个提取运算符连在一条语句中,读取多个数据项。例如:

char name[20];

int age;

cin>>name>>age;

在此例中,如果给name输入的字符超过20个,则输入文本将溢出变量name的内存区域而覆盖变量age,甚至还可能覆盖程序的部分指令,这样就会破坏程序。所以,需要有一种方法将数组变量或指针变量的长度准确地告诉流,这就是格式化I/O。

3.cerr

cerr类似标准错误文件。cerr与cout的差别在于:

(1)cerr是不能重定向的;

(2)cerr不能被缓冲,它的输出总是直接传送到标准输出设备上。

错误信息是写到cerr的项。即使在各种其他输出语句中,如果使用下列语句,则错误信息“Error”总能保证在显示器上显示出来:

cerr<<"Error"<<"\n";

4.clog

clog是不能重定向的,但是可以被缓冲。在某些系统中,由于缓冲,使用clog代替cerr可以改进显示速度:

clog<<"Error"<<"\n";