gpt4 book ai didi

c++ - 试图理解 std::cin.get()

转载 作者:太空宇宙 更新时间:2023-11-04 13:42:50 24 4
gpt4 key购买 nike

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

所以我的程序是用于 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() 。但由于某种我无法弄清楚的原因,输出屏幕就消失了。

有什么意见或解释吗??

最佳答案

您似乎有什么东西卡在了缓冲区中,这导致您的所有 get 都被填充。

我建议如下:

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

关于c++ - 试图理解 std::cin.get(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27081195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com