while循环同时击中两个输出,而不仅仅是我预期的一个

时间:2019-05-03 17:02:42

标签: c++

因此,我在“二进制搜索树”中建立了一个词典,用户应该可以在该程序中查找一个单词,该单词将从.txt文件中检索并显示其定义。

我正在使用关键字函数搜索每行的第一个单词,当找到正确的单词时,该函数将获取整行并显示它。

这是问题所在,如果我在词典中搜索不到的单词,该函数将输出“找不到单词”,就像我期望的那样。但是,无论何时我搜索文件中的单词,我都会得到单词/ def输出和“我找不到单词”消息,我只想在没有匹配项时出现。

在此处调用关键字函数:

case 1:
            cout << "\nEnter the word that you would like to look up:" << endl;
            cin >> word;
            wordFile.open("dictionaryWords.txt");
            B.Keyword(wordFile , word);
            wordFile.close();

            cout << endl;

            break;

这是有问题的while循环的关键字函数。

void BSTree::Keyword(fstream & wordFile, string word) {
    string def;
    while (getline(wordFile, def)) {
        if (def.find(word) != string::npos)
        {
            cout << def << endl;
        }
    }
    cout << word << " not found" << endl;
}

2 个答案:

答案 0 :(得分:0)

您的问题是,一旦找到单词并将其打印出来,您就不会“退出”循环。你应该加休息一下;在cout << def << endl之后;另外,您还应该放一个布尔值,告诉您是否找到了这样的单词:

void BSTree::Keyword(fstream & wordFile, string word) {
string def;
bool found = false;
while (getline(wordFile, def)) {
    if (def.find(word) != string::npos)
    {
        cout << def << endl;
        found = true;
        break;
    }
}
if(!found){
    cout << word << " not found" << endl;
}

答案 1 :(得分:0)

对我来说似乎是一个无限循环。如果找到单词,则需要在while循环中添加中断。