1.2 初识输入输出(1)
C++(www.cppentry.com)语言并未定义任何输入输出(IO)语句,取而代之包含了一个全面的标准库(standard library)来提供IO机制(以及很多其他设施)。对于很多用途,包括本书中的示例来说,我们只需了解IO库中一部分基本概念和操作。
本书中的很多示例都使用了iostream库。iostream库包含两个基础类型istream和ostream,分别表示输入流和输出流。一个流就是一个字符序列,是从IO设备读出或写入IO设备的。术语"流"(stream)想要表达的是,随着时间的推移,字符是顺序生成或消耗的。
标准输入输出对象
标准库定义了4个IO对象。为了处理输入,我们使用一个名为cin(发音为see-in)的istream类型的对象。这个对象也被称为标准输入(standard input)。对于输出,我们使用一个名为cout(发音为see-out)的ostream类型的对象。此对象也被称为标准输出(standard output)。标准库还定义了其他两个ostream对象,名为cerr和clog(发音分别为see-err和see-log)。我们通常用cerr来输出警告和错误消息,因此它也被称为标准错误(standard error)。而clog用来输出程序运行时的一般性信息。
系统通常将程序所运行的窗口与这些对象关联起来。因此,当我们读取cin,数据将从程序正在运行的窗口读入,当我们向cout、cerr和clog写入数据时,将会写到同一个窗口。
一个使用IO库的程序
在书店程序中,我们需要将多条记录合并成单一的汇总记录。作为一个相关的,但更简单的问题,我们先来看一下如何将两个数相加。通过使用IO库,我们可以扩展main程序,使之能提示用户输入两个数,然后输出它们的和:
- #include <iostream>
- int main()
- {
- std::cout << "Enter two numbers:" << std::endl;
- int v1 = 0, v2 = 0;
- std::cin >> v1 >> v2;
- std::cout << "The sum of " << v1 << " and " << v2
- << " is " << v1 + v2 << std::endl;
- return 0;
- }
这个程序开始时在用户屏幕打印
- Enter two numbers:
然后等待用户输入。如果用户键入
- 3 7
然后键入一个回车,则程序产生如下输出:
- The sum of 3 and 7 is 10
程序的第一行
- #include <iostream>
告诉编译器我们想要使用iostream库。尖括号中的名字(本例中是iostream)指出了一个头文件(header)。每个使用标准库设施的程序都必须包含相关的头文件。#include指令和头文件的名字必须写在同一行中。通常情况下,#include指令必须出现在所有函数之外。我们一般将一个程序的所有#include指令都放在源文件的开始位置。
向流写入数据
main的函数体的第一条语句执行了一个表达式(expression)。在C++(www.cppentry.com)中,一个表达式产生一个计算结果,它由一个或多个运算对象和(通常是)一个运算符组成。这条语句中的表达式使用了输出运算符(<<)在标准输出上打印消息:
- std::cout << "Enter two numbers:" << std::endl;
<<运算符接受两个运算对象:左侧的运算对象必须是一个ostream对象,右侧的运算对象是要打印的值。此运算符将给定的值写到给定的ostream对象中。输出运算符的计算结果就是其左侧运算对象。即,计算结果就是我们写入给定值的那个ostream对象。
我们的输出语句使用了两次<<运算符。因为此运算符返回其左侧的运算对象,因此第一个运算符的结果成为了第二个运算符的左侧运算对象。这样,我们就可以将输出请求连接起来。因此,我们的表达式等价于
- (std::cout << "Enter two numbers:") << std::endl;
链中每个运算符的左侧运算对象都是相同的,在本例中是std::cout。我们也可以用两条语句生成相同的输出:
- std::cout << "Enter two numbers:";
- std::cout << std::endl;