логические операторы || - PullRequest
0 голосов
/ 25 февраля 2011
  if ( (code == S || M || L || N || P || K ||R || C || U || W || O) )
    {
       return T;
    }

Правильно ли я использую оператор или? Я собирался быть одним из этих персонажей, но я не уверен, правильно ли я использую оператор

Ответы [ 5 ]

9 голосов
/ 25 февраля 2011

Вам нужно написать:

code == 'S' || code == 'M' || code == 'L', etc.

Но вы также можете сделать:

if(strchr("SMLNPKJRCUWO", code) != NULL) (or != 0, if you don't have NULL defined)
{}

strchr говорит: "Является ли символ в строке? Если да, дайте мне указатель на то, где он находится. Если нет, то верните NULL" (это просто фантастический способ сказать ноль).

Чтобы использовать strchr, вам, вероятно, понадобится #include <string.h> вверху исходного файла.

3 голосов
/ 25 февраля 2011

Нет, это недействительно. Во-первых, каждый из них должен быть в одинарных кавычках, а во-вторых, вы должны явно сравнивать с каждым символом, то есть if(code == 'S' || code == 'M' ...).

Если вы проверяете это много условий, пришло время получить массив и использовать цикл.

1 голос
/ 25 февраля 2011

Нет, вы должны написать -

if ( (code == 'S') ||(code == 'M') ||(code == 'L') /*....*/)
0 голосов
/ 25 февраля 2011

Нет. Прежде всего, я предполагаю, что code имеет тип char и содержит один символ.

Если вы хотите использовать оператор if, вам нужно написать ...

if ( (code == 'S' || code == 'M' || code == 'L' || ...)
{
   return 'T';
}

Однако я рекомендую использовать для этого переключатель / чехол.

switch(code){
case 'S':
case 'M':
case 'L':
case 'N':
case 'P':
case 'K':
case 'R':
case 'C':
case 'U':
case 'W':
case 'O':
    return 'T';
    break;
case 'V':
    /* Do something else if code == 'V' */
    break;
default:
    /* It's any other value... */
}

Обычно при использовании switch / case вам говорят использовать break после каждой опции, потому что опции будут «проваливаться». Но вы также можете использовать это в своих интересах, если у вас есть несколько вариантов.

0 голосов
/ 25 февраля 2011

Нет, ты не. || - это логика или операция, и C-компилятор интерпретирует это следующим образом:

if ( (code == 'S' || 'M' != 0 || 'L' != 0 || 'N' != 0 || 'P' != 0 || 'K' != 0 || 'R' != 0 || 'C' != 0 || 'U' != 0 || 'W' != 0 || 'O' != 0) )

, что я в любом случае ожидаю. Я уверен, что вы хотели что-то менее привычное, как язык, но математически правильное:

if ( (code == 'S' || code == 'M' || code == 'L' || code == 'N' || code == 'P' || code == 'K' || code == 'R' || code == 'C' || code == 'U' || code == 'W' || code == 'O') )

Может быть, вы хотите рассмотреть switch, который выглядел бы лучше и яснее.

switch(code) {
case 'S':
case 'M':
case 'L':
case 'N':
case 'P':
case 'K':
case 'R':
case 'C':
case 'U':
case 'W':
case 'O':
    return 'T';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...