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高级编程