使用getline时字符消失()

时间:2018-01-21 20:41:55

标签: c++ getline trie

所以这里是代码:

#include <iostream>
#include "Trie.h"
using namespace std;

void main()
{
    string input;
    Trie dictionary('\0');
    while (true)
    {
        getline(cin, input);
        if (input[0] != '.')
        {
            dictionary.analyzeText(input);
        }
    }
    cout << endl;
    while (input[0] != '.')
    {
        getline(cin, input);
        dictionary.analyzeTextP2(input);
    }
    system("pause>null");
}

它不是最终版本,但是当我输入如下输入时

The quick brown fox
totally jumper over
the lazy
terrier dog
.

最后一行中的.应该是完成从用户那里获得输入的标记,但getline在第五次迭代时没有得到它,不知道为什么。 我确保textAnalyze()函数不会与第五行交互。

那么,.怎么会被吞下或导致什么呢? (而且我知道在第一个循环中我需要break;,没关系)

1 个答案:

答案 0 :(得分:0)

  

我知道在第一个循环中我需要一个break;,没关系。

这是问题的根源。

让我们将输入简化为两行:

The quick brown fox
.

第一次调用getline后,input的值为"The quick brown fox"

执行了调用dictionary.analyzeText(input);

第二次致电getline后,input的值为"."

未执行调用dictionary.analyzeText(input);

在下一次调用getline时,getline返回时failbit设置为true,input的值保持不变。

在下一次调用getline时,getline返回时failbit设置为true,input的值保持不变。

它一直在继续。

input的值仍然设置为".",但程序永远不会超出while循环。

您需要以下内容:

while ( getline(cin, input) && input[0] != '\0' )
{
   dictionary.analyzeText(input);
}

可以简单地删除用于处理用户输入的第二个代码块。