输入与输出
iostream库
在C++中没有专门定义的输入输出(IO)语句,而是使用了一个全面的标准库来提供IO机制等功能,也就是iostream库。而在iostream库中包含了两个基础类型:
- istream(in stream):输入流
- ostream(out stream):输出流
流的
IO对象
在标准库中定义了4个IO对象,分别为1个istream型,3个ostream型:
- instream型:
- cin(发音see in):标准输入对象
- ostream型:
- cout:标准输出对象
- cerr:输出警告和错误信息
- clog:输出程序运行时的一般性消息
- instream型:
输入输出例程:
1 |
|
下面针对这个例程讲解:
前缀std::
这个前缀指出cin、cout、endl都是定义在名为std的命名空间中的。使用命名空间可以避免与用户定义的名字冲突。且标准库的所有名字都是定义在std中的。
从输入流读取数据:
1
2int a,b;
std::cin>>a>>b;//输入输入运算符(>>)
该运算符接收两个运算对象:
左侧:必须为一个ostream型的对象
右侧:存放输入的值的变量
返回值(计算结果): ostream型的对象(左侧运算对象)
也就是说下面几种写法是一个意思:
1
2
3
4
5
6std::cin>>a>>b;
/****************************/
(std::cin>>a)>>b;
/****************************/
std:cin>>a;
std:cin>>b;
向输出流写入数据:
1
std::cout<<a+b<<std::endl;//输出
输出运算符(<<)
该运算符接收两个运算对象:
- 左侧:必须为一个istream型的对象
- 右侧:要打印的值
返回值(计算结果): 写入给定值的ostream型的对象
也就是说下面几种写法是一个意思:
1
2
3
4
5
6std::cout<<a+b<<std::endl;
/****************************/
(std::cout<<a+b)<<std::endl;
/****************************/
std::cout<<a+b;
std::cout<<std::endl;endl操纵符 (小写L,不是1)
endl也是被定义在std中的一个特殊值,写入endl的效果是结束当前行(类似c中的\n),并将与设备相关联的缓冲区中的内容刷到设备中。
缓冲刷新操作可以保证目前为止程序中所产生的所有输出都真正的写入到了输出流中,而不仅停留在内存中等待写入流。
关于数据缓冲区
1
2
3
4
5
6
7
8
9
10
11
int main()
{
int a,b=1,c;
while(std::cin>>a)
{
//while (getchar()!= '\n');
std::cout<<"times:"<<b++<<std::endl;
}
return 0;
}当使用一个istream对象为条件时,其效果就是检测输入流当前的状态,如果流是有效的,此时istream对象使条件为真,当遇到以下情况时为假:
- 无效输入:例如上方输入不为int型(与a类型不符合)
- 当输入流遇到文件结束符,对于window系统,输入文件结束符的方法是ctrl+z+\n
在上方程序中(当注释掉第七行时),当输入4 ‘\0’ 5时,time也会对应输出2次,即1 ‘\n’ 2 。这是因为当输入一次性输入两个数时,第一个数存进a,第二个数会被存在数据缓冲区中等待下一次读取输入流的操作;若想清除缓冲区(或者说是清零),只需添加第7行即可。