HOME/CPP Primer/

1.2 初识输入输出

Article Outline
TOC
Collection Outline

1.2 初识输入输出

C++语言未定义任何输入输出语句,由标准库提供IO机制。

iostream库包含两个基础类型istream和istream,分别表示输入流和输出流。一个流就是一个字符序列,是从IO设备读出或写入IO设备的。

标准输入输出对象

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

一个使用IO库的程序

#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;
}

程序的第一行

#include <iostream>

告诉编译器我们想要使用iostream库。尖括号中的名字指出了一个头文件。每个使用标准库设施的程序都必须包含相关的头文件。#inc1ude指令和头文件的名字必须写在同一行中。通常情况下,#include指令必须出现在所有函数之外。我们一般将一个程序的所有#include指令都放在源文件的开始位置。

向流写入数据

输出运算符(<<)在标准输出上打印消息:

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

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

使用标准库中的名字

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

从流读取数据

在提示用户输入数据之后,接下来我们希望读入用户的输入。首先定义两个名为v1和v2的变量来保存输入

int v1 = 0,v2 = 0;

下一条语句是

std::cin >> v1 >> v2;

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

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

完成程序

剩下的就是打印计算结果了:

std::cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 <<std::endl;

这条语句虽然比提示用户输入的打印语句更长,但原理上是一样的,它将每个运算对象打印在标准输出上。本例一个有意思的地方在于,运算对象并不都是相同类型的值。标准库定义了不同版本的输入输出运算符,来处理这些不同类型的运算对象。