04 - 标准IO简介

标准IO简介

IO简单来说就是数据在输入设备,内存,硬盘,输出设备之间移动的过程。

对于C语言,它实现了许多不相关的函数来实现这些过程。例如printf就是让数据从内存到显示屏(输出设备);scanf就是让数据从键盘(输入设备)到内存。此外还有从内存到磁盘的文件操作等。这些函数彼此不相关。

而C++有了继承功能,可以让子类与父类间有关联性,极大的提高各种IO功能之间的耦合性。

于是C++用继承功能重写了IO,这就是IO库。IO库引入了“流”的概念,数据从一个地方流到另一个地方,原本地方的数据就无了,叫做流很贴切。

更多内容详见Part6:IO库,这里简单介绍一下怎么进行输入输出。

输出

要想使用cout(控制台输出流),首先要包含<iostream>头文件,然后使用<<运算符:

int i {2};
cout << i << endl;

C++可通过\n开始一个新行,也能通过std::endl。他俩的区别是,后者还会刷新缓冲区,因此在性能关键的代码中需要审慎使用,例如紧密循环。

输入

要想使用cin(控制台输入流),首先要包含<iostream>头文件,然后以输入一个字符串为例:

string userInput;
cin >> userInput;

>>运算符从输入流中读取数据,它会根据空白字符对输入值进行标志化,也就是说,上例 只有第一个空白字符之前的内容才会存储在 userInput 变量中

空白字符:空格( ' ' ),换行( \f\n ),回车( '\r' ),水平制表符(\t)和垂直制表符('\v')

如果要获取一整行的输入(除换行外的空白字符),可以使用cin.getline()std::getline()

// cin.getline(缓冲区, 缓冲区大小, 默认为'\n'的分隔符)
char buffer[kBufferSize] {0};
cin.getline(buffer, kBufferSize);

// std::getline(流, 字符串, 默认为'\n'的分隔符)
string myStr;
getline(cin, myStr, '@');

参考资料

  • 飘零的落花 - 现代C++详解
  • C++20高级编程