Как мне выразить, что я хочу сделать что-то «если функция возвращает true / false» - PullRequest
0 голосов
/ 28 марта 2011

Я делаю словарную программу.Перед добавлением слова в словарь функция AddWord вызывает функцию SearchForWord, и если функция поиска обнаруживает, что переданное ей слово уже находится в словаре, она возвращает значение true.

В функции добавления я хочу, чтобы она перешла к той части, где фактически добавляется слово, только если функция поиска возвращает ложное значение (то есть не найдено слово), и я не могу понять, каквыразить это правильно.

Редактировать: Я скопировал и вставил все это из 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 ]

4 голосов
/ 28 марта 2011

Вы хотите;

if(SearchForWord(word) == false)

не

if(SearchForWord(word) = false)

Как точка стиля, было бы лучше пойти;

if( !SearchForWord(word) )

Или, может быть, даже лучше;

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

Я считаю, что действительно полезно вводить так называемые логические переменные с хорошими именами, это повышает удобочитаемость, потому что чтение вслух условного слова в вашей голове теперь приводит к "если слово не найдено". Кроме того, становится легче и менее запутанно отслеживать прогресс в большинстве отладчиков.

2 голосов
/ 28 марта 2011

Вы хотите:

if(!SearchForWord(word))

Никогда не используйте == при сравнении логических значений. Вы можете случайно назначить значение, как вы там. Учтите это:

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

Теперь, когда это срабатывает, первое, что он сделает, потому что есть только ОДИН знак равенства, присваивает engagedInNuclearWar, чтобы быть правдой. Это ошибка, мы хотим проверять, не присваивая. В результате мы запускаем ракеты, когда не должны. Какой-то стажер, вероятно, потеряет свою работу из-за этого (если его не убьют в последующем ядерном холокосте).

Вместо этого избегайте использования ==, но полагайтесь на логическое вычисление.

if(engagedInNuclearWar) { // no chance for = vs == typo
    fireMissiles();
}
1 голос
/ 28 марта 2011
if (!SearchForWord(word)) {
    // add the word
} else {
    // don't add the word
}
0 голосов
/ 28 марта 2011

= - оператор присваивания. Он используется для присвоения значения переменной (например, a=5). Чтобы проверить, равно ли a b, нужно написать a==b. Итак

if(SearchForWord(word)=false)

следует изменить на

if(SearchForWord(word)==false)
0 голосов
/ 28 марта 2011

Вы хотите сделать: if (! SearchForWord (word))

Использование = is - это не булево назначение.

...