初识输入输出

C++ 语言并未定义任何输入输出(IO)语句,取而代之,包含了一个全面的标准库(iostream)来提供IO机制(以及很多其他设施)。

iostream库包含两个基础类型istream和ostream,分别表示输入流核输出流。一个流就是一个字符序列,是从IO设备读出或写入IO设备的。术语“流”想要表达的是,随着时间的推移,字符是顺序生成或消耗的。

标准输入输出对象

标准块定义了4个IO对象。为了处理输入,我们使用了一个名为cin的istream类型的对象。这个对象也被称为标准输入。对于输出,我们使用一个名为cout的ostream类型的对象。此对象也被称为标准输出。标准库还定义了其他两个ostream对象,名为cerr和clog。我们通常用cerr来输出警告和错误信息,因此它也被称为标准错误。而clog用来输出程序运行时的一般性信息。

系统通常将程序所运行的窗口与这些对象关联起来。因此,当我们读取cin,数据将从程序正在运行的窗口读入,当我们向cout、cerr和clog写入数据时,将会写到同一个窗口。

向流写入数据

输出运算符<<接受两个运算对象:左侧的运算对象必须是一个ostream对象,右侧的运算对象是要打印的值。此运算符将给定的值写到给定的ostream对象中。输出运算符的计算结果就是其左侧运算对象。即,计算结果就是我们写入给定值的那个ostream对象。

例如:

std::cout<<"Enter two numbers:"<<std::endl;

我们的输出语句使用两次<<运算符。因为此运算符返回其左侧的运算对象,因此第一个运算符的结果成为了第二个运算符的左侧运算对象。这样,我们就可以将输出请求连接起来。因此,我们的表达式等价于:

(std::cout<<"Enter two numbers:|")<<std::endl;

链中每个运算符的左侧运算对象都是相同的,在本例中是std::cout。我们也可以用两条语句生成相同的输出:

std::cout<<"Enter two numbers:";

std::cout<<std::endl;

第二个运算符打印endl,这是一个被称为操纵符的特殊值。写入endl的效果是结束当前行,并将与设备关联的缓冲区中的内容刷到设备中。缓冲刷新操作可以保证到目前为止程序所产生的所有输出都真正写入输出流中,而不是仅停留在内存等待写入流。

使用命名空间

std::cout和std::endl使用了std限制,而不是直接使用了cout和endl。前缀std::指明名字cout和endl是定义在名为std的命名空间中的。命名空间可以帮助我们避免不经意的名字定义冲突,以及使用库中相同名字导致的冲突。标准库定义的所有名字都在命名空间std中。

从流读取数据

输入运算符>>与输出运算符类似,它接受一个istream作为其左侧运算对象,接受一个对象作为其右侧运算对象。它从给定的istream读入数据,并存入给定对象中。与输出运算符类似,输入运算符返回其左侧运算符对象作为其计算结果,因此,表达式

std::cin>>v1>>v2;

等价于

(std::cin>>v1)>>v2;

由于此运算符返回其左侧运算对象,因此我们可以将一系列输入请求合并到单一语句中。本例中的输入操作从std::cin读入两个值,并将第一个值存入v1,将第二个值存入v2.

读入数量不定的输入数据

例如

while(std::cin>>value)

while循环条件的求值就是执行表达式

std::cin>>value

此表达式从标准输入读取下一个数,保存在value中。输入运算符返回其左侧运算对象,在本例中是std::cin。因此,此循环条件实际上检测的是std::cin

当我们使用一个istream对象作为条件时,其效果是检测流的状态。如果流是有效的,即流未遇到错误,那么检测成功。当遇到文件结束符(end-of-file),或遇到一个无效的输入时(例如读入的值与输入到的变量类型不同时),istream对象的状态就是变为无效。处于无效状态的istream对象会使条件变为假。

因此,我们的while循环会一直执行直到遇到文件结束符(或输入错误)。

当从键盘向程序输入数据时,对于如何指出文件结束,不同操作系统有不同的约定。
在windows系统中。输入文件结束符的方法是敲Ctrl+Z
在UNIX系统中,包括Max OSx 系统中,文件结束符输入是用Ctrl+D.

  

原文地址:https://www.cnblogs.com/wuchanming/p/3878466.html