首页 > 代码库 > C++ Primer 笔记——输入输出

C++ Primer 笔记——输入输出

1.C++语言并未定义任何输入输出语句,取而代之,包含了一个全面的标准库来提供IO机制。

技术分享

由上图能够知道,I/O操作的基类是ios_base,各个类的用途例如以下:

  • <iostream>
  •                      istream    从流中读取数据
  •                      ostream   向流中写数据
  •                      iostream  对流进行读写操作。派生于istream和ostream
  • <fstream>
  •                      ifstream    从文件里读取数据。派生于istream
  •                      ofstream   向文件里写数据,派生于ostream
  •                      fstream     读写文件, 派生于iostream
  • <sstream>
  •                      istringstream    读取string对象。派生于istream
  •                      ostringstream   写string对象。派生于ostream
  •                      stringstream     读写string对象,派生于iostream

 

2.C与C++处理输入输出的方式不同,我们从C语言的输入输出可以很明显看出是函数调用方式,而C++的则是对象模式,iostream类是派生于ostream类和istream类,而cout和cin是ostream类和istream类的对象。

 

3. std::endl 实质上是一个函数,它做了两件事情:输出一个 ‘\n‘ 并刷新缓冲区。

// VS2015编译器上的定义    // MANIPULATORStemplate<class _Elem,    class _Traits> inline    basic_ostream<_Elem, _Traits>&        __CLRCALL_OR_CDECL endl(basic_ostream<_Elem, _Traits>& _Ostr)    {    // insert newline and flush stream    _Ostr.put(_Ostr.widen(\n));    _Ostr.flush();    return (_Ostr);    }
    // 以下三个语句是等价的    std::cout << std::endl;    std::cout << &std::endl;    std::cout << \n << std::flush;

 

4.因为系统在空闲的时候会不停的检查缓冲区,如果发现新内容,将刷新缓冲区,这也是为什么我们不用std::endl或std::flush时也可以正常输出的原因。

 

5.当从键盘向程序输入数据时,对于如何指出文件结束,不同操作系统有不同的约定。在Windows系统中,输入文件结束符的方法是Ctrl + Z,然后按Enter或Return键。在UNIX系统中,包括Mac OS X系统中,文件结束符输入是用Ctrl+D。

 

6.我们在输入的过程中,可以用一些std::cin的函数来判断输入的结果是否正确。

    // 以下返回都是bool值    std::cin.bad();        // 输入流出现致命性错误,不可挽回     std::cin.fail();    // 输入流出现非致命性错误,可挽回    std::cin.eof();        // 输入流出到达文件结尾    std::cin.good();    // 输入流完全正常

 

C++ Primer 笔记——输入输出