【问题标题】:Flushing of cout prior to reading input using cin .. why?在使用 cin 读取输入之前刷新 cout .. 为什么?
【发布时间】:2011-02-11 21:10:43
【问题描述】:

为什么 cout 必须在 cin 开始读取之前刷新?他们不是不同的缓冲区吗?我可以将输入读取到缓冲区中,同时将其放入输出缓冲区(在刷新之前).. 2 个不同的缓冲区。我在这里很困惑。

【问题讨论】:

    标签: c++


    【解决方案1】:

    典型的例子是这样的:

     std::cout << "Enter your name: ";
     std::string name;
     std::cin >> name;
    

    您确实希望在输入之前看到提示,这就是这两个流捆绑在一起的原因。

    【讨论】:

      【解决方案2】:

      它不必被刷新。默认情况下,流是tied 在一起,因此当您执行以下操作时:

      cout << "Enter your name:";
      cin >> name;
      

      在输入开始之前出现提示 - 这只是一个方便的功能。但是,您可以解开它们:

      cin.tie( static_cast<ostream*>(0) );
      

      在对 cin 执行输入之前,不会(必然)刷新哪个 cout。

      【讨论】:

      • 如果我想在缓冲区中保留“输入你的名字:”而不显示它,同时我想阅读怎么办?
      • @yapkm01 就像我说的 - 解开它们。但是,您似乎不太可能真的想要这样做。
      • @yapkm01:如果你认为这最能回答你的问题,你应该接受它。
      • @sbi 另一个更好的答案可能来自不同时区的某人。请不要强迫人们(尤其是代表我)接受。
      • @Neil:据我了解,您以后可以随时更改接受的答案。如果答案适合并回答了问题,为什么不接受呢?无论如何,我并没有试图施加压力。我只是认为代表 6 的人可能不太了解规则,并且可以忍受被暗示。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      • 2017-06-02
      • 2018-08-13
      • 2011-06-18
      • 1970-01-01
      相关资源
      最近更新 更多