试图理解 std::cin.get()
trying to understand std::cin.get()
大家好,所以我正在阅读有关 std::cin.get() func 的信息,并读到我们使用它来捕获在向控制台输入任何输入后输入的换行符字符。但是我在编写一个非常基本的小程序时有点困惑,无法理解它的行为。
所以我的程序是用于 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() func时,如果我在main()func中编写整个代码,它就可以完美地工作,这让我非常困惑。
根据我的理解,当我在控制台中输入 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
相关文章:
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- 使用 cin.get() 初始化字符数组
- 编写 cin.get() 以接收字符数组时出现问题
- 使用 cin.get 读取字符数组
- cin.get()的返回类型
- 在循环中使用 cin.get() 输入字符串
- 为什么 cin.get(char, int) 不会溢出?
- cin.get() 导致"no instance of overloaded function"错误
- 为什么当我输入字符时,这个特定的 cin.get() 语句在C++中不起作用?
- 为什么程序在 cin 之后跳过 cin.get()?
- 如何终止 std::cin.get() 的 ''
- 使用 cin.get() 读取字符
- 无法让我了解 cin.get 和 cout 在这里的工作方式
- cin.get()函数在C 中
- 如何在 c++ 中使用 cin.get() 给出更多数字?
- (m = cin.get())!=EOF&m = cin.get()!=EOF 之间的差异
- 为什么我的应用程序即使我的应用程序也关闭,即使我有cin.get();
- C 使用CIN.Get()暂停此程序
- cin.get() 之后的回车;C++
- 我是否缺少 cin.get() 的东西