繁体   English   中英

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

[英]trying to understand std::cin.get()

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

所以我的程序是用c ++加引号进行练习的。 无论如何,代码如下:

#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数组并按return时,缓冲区将控制台数据和换行符保持在队列中,并且在处理while循环并显示cout之后,该返回值将被第一个std吸收:: cin.get()。 因此,程序应等待我输入另一个返回值,该返回值将被第二个cin.get()吸收,并且还应询问我另一个返回值,因为主函数中也有cin.get()。 但是由于某种原因,我无法弄清楚,输出屏幕只是消失了。

有任何意见或解释吗?

似乎您的缓冲区中卡了一些东西,导致您的所有get都被填满了。

我建议以下内容:

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

如果流中没有可用的字符,则cin.get()将返回EOF并设置流的故障位。 我怀疑这是正在发生的事情,因此您的程序将只通过所有cin.gets,而不会等待另一个返回字符。

为了澄清istream :: get的工作方式: istream :: get

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM