如果函数返回true / false,我如何表达我想要做的事情?

时间:2011-03-28 03:01:32

标签: c++ syntax boolean

我正在制作一个字典程序。在向字典添加单词之前,AddWord函数调用SearchForWord函数,如果搜索函数发现传递给它的单词已经在字典中,则返回true。

在add函数中,我希望它继续移动到它实际添加单词的部分,只有当搜索函数返回false时(意味着它没有找到单词)并且我无法弄清楚如何正确表达这个

编辑:我从emacs复制并粘贴了这一切,格式很时髦,不讨厌。

bool Dictionary:: AddAWord(string word)
{
  ofstream fout;  
  string fileName="#.txt";  
  fileName[0]=toupper(word[0]);  

  if(SearchForWord(word)=false){   //here i figured the SearchForWord function would be called and return either true or false  
    //add word  
  }else{  
    //dont add word  
  }

如果有帮助,这是完整的搜索功能

bool Dictionary::SearchForWord(string word)  
{  
   ofstream fout;  
   ifstream fin;  
   string x;  
   string fileName="#.txt";  
   fileName[0]=toupper(word[0]);  
   fout.open(fileName.data());  
   if(!fin.eof()){  
     while(fin>>x){  
      if(x=word){  
       cout<<"Word found during search";  
       return(Dictionary::success);  
      }  
     }  
    }else{  
       return(Dictionary::failure);  
    }  
}

5 个答案:

答案 0 :(得分:4)

你想要;

if(SearchForWord(word) == false)

if(SearchForWord(word) = false)

作为一种风格,最好去;

if( !SearchForWord(word) )

或者甚至更好;

bool word_found = SearchForWord(word);
if( !word_found )

我发现引入名称很好的布尔变量非常有用,它增强了可读性,因为现在大声读出条件会导致“如果没有找到单词”。此外,在大多数调试器中跟踪进度变得更容易,也更容易混淆。

答案 1 :(得分:2)

你想:

if(!SearchForWord(word))

比较布尔值时,切勿使用==。您可能会意外地分配值,就像您在那里一样。考虑一下:

if(engagedInNuclearWar = true) { // typo. should be ==
    fireMissiles();
}

现在,当它触发时,它会做的第一件事,因为只有一个等号,分配engagedInNuclearWar为真。这是一个错误,我们希望检查不分配。结果,我们不应该发射导弹。一些实习生可能会失去他的工作(如果他没有在随后的核浩劫中被杀死。)

相反,避免使用==但依赖布尔评估。

if(engagedInNuclearWar) { // no chance for = vs == typo
    fireMissiles();
}

答案 2 :(得分:1)

if (!SearchForWord(word)) {
    // add the word
} else {
    // don't add the word
}

答案 3 :(得分:0)

你想做:if(!SearchForWord(word))

使用=赋值不是布尔值。

答案 4 :(得分:0)

=是赋值运算符。它用于为变量赋值(如a=5)。要检查a是否等于b,您必须编写a==b。 所以

if(SearchForWord(word)=false)

应改为

if(SearchForWord(word)==false)