无法解决cin.get和cout在这里工作的问题

时间:2018-04-05 13:08:35

标签: c++ iostream

我在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流在这个循环中的确切行为。

1 个答案:

答案 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'|

依此类推,直到你到达终点。
然后你的程序开始等待下一行输入。