无法让我了解 cin.get 和 cout 在这里的工作方式



我正在浏览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'|

依此类推,直到您到达行的末尾。
然后,程序开始等待下一行输入。

相关内容

最新更新