我正在浏览C++注释的iostreams,并遇到将cin stream复制到cout。我的传统智慧是,cout 只应该打印一个字符,而是 cout 打印整行,直到我用换行符或 EOF 终止它。
#include <iostream>
using namespace::std;
int main()
{
while (true)
{
char c;
cin.get(c);
if (cin.fail())
break;
cout << c;
}
}
示例输入/输出:
123456789
123456789
查看代码,我期望只打印一个字符。
我认为我对流的理解可能从根本上是错误的。有人可以解释一下 cin 和 cout 流在这个循环中的行为方式。
标准输入是行缓冲的,并作为流读取。
按 Enter 时,整行将放入输入缓冲区:
|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'|'n'|
然后cin.get(c)
读取'1'
,cout << c
打印,流变为
|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'|'n'|
在下一次迭代之后,读取'2'
并打印:
|'3'|'4'|'5'|'6'|'7'|'8'|'9'|'n'|
依此类推,直到您到达行的末尾。
然后,程序开始等待下一行输入。