所以这里是代码:
#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;
,没关系)
答案 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);
}
可以简单地删除用于处理用户输入的第二个代码块。