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, '@');

参考资料