2015-10-01 1 views
0

Я хочу знать, как уменьшить логический код операции.Логические операции: я хочу легко выполнить логические операции

int a; 

cin >> a; 

if(a == 1 || a == 3 || a == 5) 
    printf("%d", a); 

пересматривают верхний подобный код

int a; 

cin >> a; 

if(a == (1 || 3 || 5)) 
    printf("%d", a) 

Но, как вы знаете, это не работает.

Как я могу изменить этот код для упрощения формы?

+1

Что заставляет вас думать, что существует более простая форма? – Beta

ответ

0

Использование массива может быть хорошим.

#include <cstdio> 
#include <iostream> 
using std::cin; 

int main(void){ 

    int a; 

    cin >> a; 

    { 
     static const int to_match[3] = {1, 3, 5}; 
     bool yes = false; 
     for (size_t i = 0; i < sizeof(to_match)/sizeof(to_match[0]); i++) { 
      if (a == to_match[i]) {yes = true; break;} 
     } 
     if(yes) 
      printf("%d", a); 
    } 

    return 0; 
} 
4

Я с @Beta - у вас уже есть простейшая форма. Тем не менее, вы можете найти переключатель заявление обеспечивает более ремонтопригодна структуру, если добавить еще много «MATCH» значений:

int a; 

cin >> a; 

switch (a) 
{ 
    case 1: 
    case 3: 
    case 5: 
     printf("%d", a); 
     break; 
    default: 
     // do nothing - not needed, but good habit 
    } 

Есть много других способов сделать это - вы можете посмотреть на членство a в set, например (см. this answer). Каждый из них будет иметь свои преимущества и пригодность для вашей реальной проблемы - «простой» - относительный термин.