输入和输出(input and output)

作者:jicanmeng

时间:2017年06月07日


c++中,I/O是通过stream来实现的。learncpp.com上面的描述是:

I/O in C++ is implemented with streams. Abstractly, a stream is just a sequence of characters that can be accessed sequentially. Over time, a stream may produce or consume potentially unlimited amounts of data.

c++中提供两种类型的stream:Input streams和Output streams。

Typically we deal with two different types of streams. Input streams are used to hold input from a data producer, such as a keyboard, a file, or a network. For example, the user may press a key on the keyboard while the program is currently not expecting any input. Rather than ignore the users keypress, the data is put into an input stream, where it will wait until the program is ready for it.
Conversely, output streams are used to hold output for a particular data consumer, such as a monitor, a file, or a printer. When writing data to an output device, the device may not be ready to accept that data yet -- for example, the printer may still be warming up when the program writes data to its output stream. The data will sit in the output stream until the printer begins consuming it.

c++程序启动的时候,就已经创建了四个标准的stream对象:cin,cout,cerr和clog, 用于和终端进行交互。cin和keyboard关联起来,cout、cerr和clog都和monitor联系起来。我们最常用的是cin和cout。

有两个特殊的操作符用于和stream交互,extraction operator<< 和 insertion operator>>。例如:

可以形象地认为,箭头的指向就是数据流的流向。

输入和输出最常用的地方有:

1. 从终端读取数据和写入数据

c语言中,向monitor写数据使用printf()函数,从keyboard读取数据使用scanf()函数。

c++中,cout代表monitor,cin代表keyboard。向monitor写数据使用cout <<这种方式。从keyboard读取数据使用cin >> 这种方式。注意,cout和cin不是函数,而是对象。

2. 从文件读取数据和写入数据

c语言中,对文件的读写操作使用fopen(), fread(), fwrite(), fclose()等函数。

c++中,在兼容上面的这种方式的同时,提供了另外的方式进行文件的读写操作。ofstream是output stream类型的stream,ifstream是input stream类型的stream。c++程序启动的时候,只是创建了四个标准的stream对象,对应于monitor和keyboard。但是并没有创建和文件联系起来的stream对象,所以我们需要手动创建ofstream或者ifstream类型的对象,然后利用<<>>操作符和stream对象进行交互。

假设我们创建了一个ofstream类型的对象of,创建了一个ifstream类型的对象if。那么

后面的两篇文章用于描述终端读写和文件读写的基本操作:

  1. 终端读写操作
  2. 文件读写操作

参考资料

  1. <<C++实用教程>> 电子工业出版社 郑阿奇 主编 丁有和 编著
  2. The C++ Tutorial:
    http://www.learncpp.com/cpp-tutorial/186-basic-file-io/
  3. misc:
    http://www.cnblogs.com/onlyan/archive/2012/08/02/2620726.html