【问题标题】:What is the purpose of using cin.get() in a while loop?在 while 循环中使用 cin.get() 的目的是什么?
【发布时间】:2017-09-01 04:38:55
【问题描述】:

我不明白为什么我必须在 while 循环中再次使用 cin.get()。在 while 循环之前使用 cin.get()cin.get() 在 while 循环中的作用相同。它读取我输入的一串文本,同时考虑空格。但很明显,在这个程序中,我试图将所有文本推送到一个向量中。如果我从 while 循环中排除 cin.get(next) 并且只有 line.push_back(next),那么程序会出错并崩溃。

请解释为什么会这样。谢谢

//Demonstration of the generic find function
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

int main()
{
vector<char> line;
cout << "Enter a line of text: \n";
char next;
cin.get(next);
while(next != '\n')
{
    line.push_back(next);
    cin.get(next);
}
return 0;
}   

【问题讨论】:

  • 从阅读 std::basic_istream::get 开始。如果您不了解程序调用的功能,您将无法理解程序的功能。相关,您的代码有错误。如果流偶然发生错误状态,它将循环到无穷远寻找永远不会出现的换行符。
  • 得到是输入。不知道混乱来自哪里。也许你应该通过调试器运行代码,这样你就可以看到它实际上在做什么。
  • 你在一个循环中使用它来让它运行很多次。如果您从循环中删除该行,那么所有循环都会一遍又一遍地将相同的字母推送到向量。请注意,while 循环的结束条件永远不会出现,如果曾经进入。

标签: c++


【解决方案1】:

这里有一个小指南可以帮助您。有时一开始很难只见树木不见森林。

定义一个名为 next 的 char 类型变量

char next;

由于 next 现在没有任何有意义的价值,让我们得到一个。我们的 while 语句中的条件需要它。

cin.get(next);

让我们循环直到下一个等于'\n'

while(next != '\n')
{

我们仍然没有对 next 做任何有意义的事情,我们唯一知道的是它不等于 '\n' 所以我们真的应该对它做点什么。

我们将它推入我们的向量中。

    line.push_back(next);

太棒了。到此为止。由于几个原因,我们现在需要一个新的 next 值。一方面,如果我们接下来不改变,我们将永远循环(或至少太长),因为循环的条件不会得到新的东西来咀嚼,另一方面,我们希望我们的向量有一个新的值,不是吗?

是的,让我们下一个

    cin.get(next);

然后回到我们循环的开始进行测试

}

就是这样。

【讨论】:

    猜你喜欢
    • 2015-05-30
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 2022-01-12
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    相关资源
    最近更新 更多