1.2.2. 一个使用IO库的程序
程序首先在用户屏幕上显示提示语:
Enter two numbers:
然后程序等待用户输入。如果用户输入
3 7
跟着一个换行符,则程序产生下面的输出:
The sum of 3 and 7 is 10
程序的第一行是一个预处理指示:
#include <iostream>
std::cout << "Enter two numbers:" << std::endl;
endl是一个特殊的值,称为操作符,当它写入输入输出流时,具有换行的效果,并刷新与设备相关连的缓冲区。
Writing to a Stream
写入到流
main 函数体中第一条语句执行了一个表达式。C++ 中,一个表达式由一个或几个操作数和通常是一个操作符组成。该语句的表达式使用输出操作符(<< 操作符),在标准输出上输出提示语:
std::cout << "Enter two numbers:" << std::endl;
C++ 中,每个表达式都会产生一个结果,通常是将操作符作用到其操作数所产生的值。当操作符是输出操作符时,结果是左操作数的值。也就是说,输出操作返回的值是输出流本身。 既然输出操作符返回的是其左操作数,那么我们就可以将输出请求链接在一起。输出提示语的那条语句等价于 (std::cout << "Enter two numbers:") << std::endl; 因为((std::cout << "Enter two numbers:"))返回其左操作数 std::cout,这条语句等价于 std::cout << "Enter two numbers:"; std::cout << std::endl; endl 是一个特殊值,称为操纵符,将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区。通过刷新缓冲区,用户可立即看到写入到流中的输出。
|
Using Names from the Standard Library
使用标准库中的名字
标准库使用命名空间的副作用是,当我们使用标准库中的名字时,必须显式地表达出使用的是命名空间 std 下的名字。std::cout 的写法使用了作用域操作符(scope operator,:: 操作符),表示使用的是定义在命名空间 std 中的 cout。我们将在第 3.1 节学习到程序中经常使用的避免这种冗长句法的方法。
Reading From a Stream
读入流
在输出提示语后,将读入用户输入的数据。先定义两个名为 v1 和 v2 的变量来保存输入:
int v1, v2;
将这些变量定义为 int 类型,int 类型是一种代表整数值的内置类型。这些变量未初始化,表示没有赋给它们初始值。这些变量在首次使用时会读入一个值,因此可以没有初始值。
下一条语句读取输入:
std::cin >> v1 >> v2;
输入操作符(>> 操作符)行为与输出操作符相似。它接受一个 istream 对象作为其左操作数,接受一个对象作为其右操作数,它从 istream 操作数读取数据并保存到右操作数中。像输出操作符一样,输入操作符返回其左操作数作为结果。由于输入操作符返回其左操作数,我们可以将输入请求序列合并成单个语句。换句话说,这个输入操作等价于:
std::cin >> v1; std::cin >> v2;
输入操作的效果是从标准输入读取两个值,将第一个存放在 v1 中,第二个存放在 v2 中。
Completing the Program
完成程序
剩下的就是要输出结果: std::cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << std::endl; 这条语句虽然比输出提示语的语句长,但概念上没什么区别。它将每个操作数输出到标准输出。有趣的是操作数并不都是同一类型的值,有些操作数是字符串字面值。例如 "The sum of " and others are various int values, such as v1, v2, and the result of evaluating the arithmetic expression: 其他是各种 int 值,如 v1、v2 以及对算术表达式 v1 + v2 The iostream library defines versions of the input and output operators that accept all of the built-in types. 求值的结果。iostream 库定义了接受全部内置类型的输入输出操作符版本。
|