查看完整版本: C++启蒙之输入/输出

lord 2008-5-4 13:44

C++启蒙之输入/输出

  C++没有直接定义任何用于执行输入或输出(IO)的语句。作为代替,IO是通过标准类库(standard library)提供的。IO类库提供了一个广泛的工具集合。但是,出于某些目的(包括本文中的例子),你可能需要了解一些基本的概念和操作。

  本文中的例子使用了iostream类库,它处理格式化输入和输出。Iostream的基础是两个类型istream和ostream,它们分别表示输入和输出流。流(stream)是准备读取或写入某个IO设备或其它设备的字符串。"流"这个术语暗示随着时间的推移,生成了字符或消除了字符。

  1、标准的输入和输出对象

  该类库定义了四个IO对象。为了处理输入,我们使用了istream类型的cin对象,它是标准的输入。输出则使用ostream的cout对象,它通常被称为标准的输出。这个类库还定义了其它的两个ostream对象,分别是cerr和clog。Cerr对象是标准的错误,典型情况下用于给程序的用户生成警告或错误消息。Clog对象用于生成程序的执行情况信息。

  通常,系统把其中的每个对象都与程序执行的窗体相关联。因此,当我们从cin中读取的时候,数据来自程序执行的窗体,当我们写入cout、cerr、clog的时候,输出也写入相同的窗体。大多数操作系统都给了我们重定向输入或输出流的方法。使用重定向可以把这些流与我们选定的文件关联起来。

  2、使用IO类库的程序

  我们已经知道了如何编译和执行简单的程序了,尽管这个程序没有任何功能。在整个问题中,有几个记录指向同一个ISBN。我们必须把这些记录合并成总数,这意味着我们必须知道如何添加销售的图书数量。

  为了看到如何解决这些问题,我们先看一看两个数字如何相加。使用IO类库,我们可以扩展已有的main程序,让用户输入两个数字,然后打印出两个数字的和:

#include <iostream>
int main()
{
std::cout << "Enter two numbers:" << std::endl;
int v1, v2;
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

  我们的程序的第一行是预处理程序指令(preprocessor directive):

#include <iostream>

  它告诉编译器我们希望使用iostream类库。尖括号内的名字是头文件(header)。每个使用了类库的程序都必须包含相关的头文件。 #include指令必须写在同一行中--头文件的名字和#include必须出现在同一行。一般来说,#include指令应该出现在函数的外面。典型情况下,#include指令出现在程序文件的开头部分。

  向流写入信息

  Main主体中的第一个语句执行了一个表达式(expression)。在C++中一个表达式由一个或多个操作数和(通常)一个操作符组成。这个语句中的表达式使用输出操作符(<<操作符)来打印标准的输出提示:

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

  这个语句两次使用了输入操作符。输出操作符的每个实例都有两个操作数:左边的操作数必须是一个ostream对象;右边的操作数是一个要输出的值。该操作符把右边的操作数写入左边的操作数ostream。

  在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是一个特殊值,称为操作者(manipulator),当写入某个输出流的时候,它的效果是把新行写入到输出并且刷新与设备相关的缓冲器。通过刷新缓冲器,我们可以确保用户立即看到写入流的输出信息。
页: [1]
查看完整版本: C++启蒙之输入/输出