Оценка одного символа в операторе if: C ++ - PullRequest
1 голос
/ 05 ноября 2011

У меня проблемы с циклом if.

Сначала я назначил символ char.

 void evaluate_ps(istream& input) 
 {
    char sign;
    input >> sign;
    cout << sign << endl;
    check(sign);
 }

Это печатает / поэтому мой знак имеет значение '/'

Затем я перехожу к своей функции проверки пустоты (операция с символами)

 void check(char operation)
 {
    if(operation != '-' || operation != '+' ||
      operation != '*' || operation != '/')
       {
       return false;
       }
       else return true;
 }

и она возвращает false ... ПОЧЕМУ !!!!Я не могу понять это.

Спасибо всем.

Ответы [ 3 ]

3 голосов
/ 05 ноября 2011

Это происходит потому, что вы используете оператор || (ИЛИ).Когда operation равно /, проверка operation != '-' возвращает true.Поскольку || имеет короткое замыкание, все выражение возвращает true.

Измените его на && (AND):

if (operation != '-' && operation != '+' &&
   operation != '*' && operation != '/')

Другой способ записать это:

if (!(operation == '-' || operation == '+' ||
      operation == '*' || operation == '/'))
2 голосов
/ 05 ноября 2011

Вы, вероятно, подразумевали, что все ваши || были &&:

if(operation != '-' && operation != '+' && 
  operation != '*' && operation != '/')

В противном случае он всегда будет вводить оператор if, поскольку символ всегда не будет равен одной из 4 разных вещей.1006 *

0 голосов
/ 05 ноября 2011

Оператор if отвечает на / не равно одному из других значений

Думайте о "или" даже в общем смысле

если синий не зеленый, или не красный, или не синий, скажем, нет

вам нужно сделать что-то вроде следующего:

if (operation != '+' && operation != '-' && operation != '/' && operation != '*') {
    return false;
}
return true;

вот так вот так

если синий не зеленый, а не красный и не синий, скажем, нет

...