试图理解std :: cin.get()

时间:2014-11-22 18:55:50

标签: c++ get std cin

大家好,所以我正在阅读有关std :: cin.get()func的内容并读取我们使用它来捕获输入控制台的任何输入后输入的换行符。但是我在编写一个非常基本的小程序时感到困惑,并且无法理解它的行为。

所以我的程序是用于c ++ primer plus的练习。无论如何,代码如下:

#include <iostream>
#include <cstring>

void countWords () {
  char word [100];
  char wordDone [] = "done";
  int count = 0;

  std::cout << "Enter words (to stop, type the word done): \n";
  std::cin >> word;

  while (strcmp(word, wordDone) != 0) {
    std::cin >> word;
    count += 1;
  }

  std::cout << "You entered a total of " << count << " words.";

  std::cin.get();
  std::cin.get();  
}

int main () {
  countWords ();

  std::cin.get();
  return 0;
}

现在问题在于,当我运行上面的代码时,屏幕会给我正确的输出,但它会消失,而不会等待我输入返回。

但是当我不是创建上面的countWords()函数时,如果我在main()函数中编写整个代码,它就能完美地运行,这让我很困惑。

根据我的理解,当我在控制台中输入char数组并按回车键时,缓冲区将控制台数据和换行符保持在队列中,并且在处理while循环并显示cout之后,返回被吸收第一个std :: cin.get()。那么程序应该等我输入另一个返回,然后它将被第二个cin.get()吸收,并且它也应该问我另一个返回,因为在main函数中也有一个cin.get()。但由于某些我无法弄清楚的原因,输出屏幕就消失了。

有任何意见或解释吗?

2 个答案:

答案 0 :(得分:2)

看起来你的缓冲区中有一些东西会导致你的所有get被填满。

我建议如下:

cin.ignore(-1, '\n');

答案 1 :(得分:-2)

如果流中没有可用的字符,则cin.get()将返回EOF并设置流的failbit。我怀疑这是发生了什么,所以你的程序将只是通过你所有的cin.gets而不是等待另一个返回角色。

有关istream :: get如何工作的说明: istream::get