我在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流在这个循环中的确切行为。
答案 0 :(得分:1)
标准输入是行缓冲的,并作为流读取。
当您按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'|
依此类推,直到你到达终点。
然后你的程序开始等待下一行输入。