I/O流类库(一)

I/O


  • 数据的输入输出(input/output简写为I/O)
  • 对标准输入设备和标准输出设备的输入输出简称为标准I/O
  • 堆在外存磁盘上的文件的输入输出简称为文件I/O
  • 对内存中指定的字符串存储空间的输入输出简称为串I/O


  • 数据输入输出的过程,可以形象的看成流
  • 从流中获取数据的操作称为“提取”(输入)操作
  • 向流中添加数据的操作称为“插入”(输出)操作
  • 标准输入输出流
  • 文件流
  • 字符串流

流类库继承体系

I/O流类库(一)_第1张图片


  • 流库具有两个平行的基类:streambuf和ios类,所有流类均以两者之一作为基类
  • streambuf类提供对缓冲区的低级操作:设置缓冲区、对缓冲区指针操作、向缓冲区存/取字符
  • ios_base、ios类记录流状态,支持对streambuf的缓冲区输入/输出的格式化或非格式化转换
  • streambuf:使用串保存字符序列。扩展streambuf在缓冲区提取和插入的管理
  • filebuf:使用文件保存字符串序列。包括打开文件、读/写、查找字符

四个输入输出对象


  • C++为用户进行标准I/O操作定义了四个类对象:cin、cout、cerr和clog
    • cin为istream流类的对象,代表标准输入设备键盘,后三个为ostream流类的对象
    • cout代表标准输出设备显示器
    • cerr和clog含义相同,均代表错误信息输出设备显示器

ostream流的操作


  • operator<<
    • 可以连续输出,因为<<返回的还是cout
  • put()
    • 输出单个字符
    • 返回一个ostream对象的引用
    • cout.put('H').put('i')
  • write()
    • write(buf, len)
    • write()返回一个ostream对象的引用
    • cout.write(buf, len) //char buf[len]

istream流的操作


  • operator>>操作
  • get()
    - 读取单个字符
    - 返回一个整数(输入字符的ASCall码值)
  • getline()
  • read()
  • peek()
  • putback()

get()

     1. 读取单个字符
     2. 返回一个整数(输入字符的ASCall码值)

get(cahr&)

     1. 返回单个字符
     2. 返回一个istream对象的引用
    #include 

    using namespace std;

    int main(void)
    {
        char ch1, ch2;
        cin.get(ch1).get(ch2);
        cout << ch1 <<"  "<return 0;
    }

这里写图片描述

getline()

     1. 读取一行(遇到回车键)
     2. 返回istream对象的引用
     3. getline()与>>的区别:
         char string1[256];
         cin.getline(string1, 256); //get a whole line
         cin>>string1;   //stop at the first blank space
    #include 

    using namespace std;

    int main(void)
    {
        char buf[10] = { 0 };
        cin.getline(buf, 9);
        cout << buf << endl;
        return 0;
    }

这里写图片描述

read()

     1. read(buf, len)
     2. 返回一个istream对象的引用
     3. 对空白字符照读不误
     4. 必须读满len个字符才停止
    #include 

    using namespace std;

    int main(void)
    {
        char buf[10] = { 0 };
        cin.read(buf, 5);
        cout << buf << endl;
        return 0;
    }

这里写图片描述

peek()

     查看而不读取

putback()

     将一个字符添加到流
#include 

using namespace std;

int main(void)
{
    char c[10],c2,c3;
    c2 = cin.get();
    c3 = cin.get();
    cin.putback(c2);
    cin.getline(c, 9);
    cout << c << endl;
    return 0;
}

这里写图片描述

你可能感兴趣的:(C++)