C++输入输出流

一、C++输入输出流的含义

     以前所用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上。从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件。程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件。C++的输入与输出包括以下3方面的内容:

  1、对系统指定的标准设备的输入和输出。简称标准I/O。(设备)

  2、以外存磁盘(或光盘)文件为对象进行输入和输出。简称文件I/O。(文件)

  3、对内存中指定的空间进行输入和输出。简称串I/O。(内存)

二、 C++的输入输出流

     输入和输出是数据传送的过程,数据如流水一样从一处流向另一处。C++形象地将此过程称为流(stream)。C++的输入输出流是指由若干字节组成的字节序列,这些字节中的数据按顺序从一个对象传送到另一对象。流表示了信息从源到目的端的流动。在输入操作时,字节流从输入设备(如键盘、磁盘)流向内存, 在输出操作时,字节流从内存流向输出设备(如屏幕、打印机、磁盘等)。流中的内容可以是ASCII字符、二进制形式的数据、图形图像、数字音频视频或其他 形式的信息。

    实际上,在内存中为每一个数据流开辟一个内存缓冲区,用来存放流中的数据。当用cout和插入运算符“<<”向显示器输出数据时,先将这些数据送到程序中的输出缓冲区保存,直到缓冲区满了或遇到endl,就将缓冲区中的全部数据送到显示器显示出来。在输入时,从键盘输入的数据先放在键盘缓冲区中,当按回车键时,键盘缓冲区中的数据输入到程序中的输入缓冲区,形成cin流,然后用提取运算符“>>”从输入缓冲区中提取数据送给程序中 的有关变量。总之,流是与内存缓冲区相对应的,或者说,缓冲区中的数据就是流。

  例如,我们看看以下代码:

      C++输入输出流

   程序运行的时候是:

      C++输入输出流

   即把a和b都输入后,才会输出字符串。

三、流对象

  在头文件<iostream>中包含了四个流对象:cin, cout, cerr, clog. 下面逐一介绍:

  1、cout对象

    cout是console output的缩写,意为在控制台(终端显示器)的输出。

    1)cout不是C++预定义的关键字,它是ostream流类的对象,在iostream中定义。顾名思义,流是流动的数据,cout流是流向显示器的数据。cout流是容纳数据的载体,它并不是一个运算符。人们关心的是cout流中的内容,也就是向显示器输出什么。    

      2)<iostream>为操作符“ << ”提供了多种类型的重载。用"cout<<”输出基本类型的数据时,可以不必考虑数据是什么类型,系统会判断数据的类型,并根据其类型选择调用与之匹配的运算符重载函数。

    3)cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据。当向cout流插人一个endl时,不论缓冲区是否已满,都支即输出流中所有数据,然后插入一个换行符,并刷新流(清空缓冲区)。注意如果插入一个换行符,'\n'(如cout<<a<<'\n';),则只输出a和换行,而不刷新cout流(但并不是所有编译系统都体现出这一区别)。

       4)除了“ << ”方法外,<iostream>还提供了write()和put()方法,write()用于显示字符串,其接受两个参数,第一个为字符串的地址,第二个为要显示字符串的长度,而put()用于显示字符,并且它们的返回值都是 “ ostream & ”,所以可以链式调用,举个例子:

        C++输入输出流

               运行结果如图:

               C++输入输出流

  2、cerr对象

      cerr流对象是标准出错流。cerr流已被指定为与显示器关联。cerr的作用是向标准出错设备(standard error device)输出有关出错信息。cerr是console error的缩写,意为“在控制台(显示器)显示出错信息”。cerr与标准输出流cout的作用和用法差不多。但有一点不同:cout流通常是传送到显示器输出,但也可以被重定向输出到磁盘文件,而cerr流中的信息只能在显示器输出。

  3、clog对象

    clog流对象也是标准出错流,它是console log的缩写。它的作用和cerr相同,都是在终端显示器上显示出错信息。它们之间只有一个微小的区别:cerr是不经过缓冲区,直接向显示器上输出有关信息,而clog中的信息存放在缓冲区中,缓冲区满后或遇endl时向显示器输出。

      4、cin对象

     cin是istream类的对象,它从标准输入设备(键盘)获取数据,程序中的变量通过流提取符“>>”从流中提取数据。流提取符 “>>”从流中提取数据时通常跳过输人流中的空格、tab键、换行符等空白字符。注意:只有在输入完数据再按回车键后,改行数据才被送人键盘缓冲区,形成输入流,提取运算符“>>”才能从中提取数据。输入流中还有一些成员函数可以实现字符的输入:

    1)get函数:

      get函数有三种重载:

      (1)cin.get():若遇到输入流中的文件结束符,则函数值返回文件结束标志EOF(End Of File),一般以-1代表EOF,用-1而不用0或正值,是考虑到不与字符的ASCII代码混淆,但不同的C++系统所用的EOF值有可能不同。例子如下:

        C++输入输出流

      (2)cin.get(char c):其作用是从输人流中读取一个字符,赋给字符变量c.

        C++输入输出流

      (3)cin.get(char *p, int n, char c):其中p为字符数组指针,n为长度,c为终止字符:

        C++输入输出流

        运行效果如下:

        C++输入输出流

        以及这样:

                           C++输入输出流

    2)getline()函数:其作用是从输人流中读取一行字符,其用法与带3个参数的get函数类似。用"cin<<”读数据时以空白字符(包括空格、tab键、回车键)作为终止标志,而用cin.getline()读数据时连续读取一系列字符,可以包括空格。

    3)eof()函数:eof是end of file的缩写,表示“文件结束”。从输人流读取数据,如果到达文件末尾(遇文件结束符),eof函数值为非零值(表示真),否则为o(假)。这个函数是很有用的,经常用到。

 

    //End.

原文链接: https://www.cnblogs.com/Vincent-Bryan/p/5495967.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++输入输出流

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/233433

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午3:53
下一篇 2023年2月13日 下午3:53

相关推荐