2016-11-17 3 views
1

Например, может быть, у нас есть, если заявление, что хочет, чтобы проверить, является ли переменная равна 4 различных значений, возможно, что-то вродеОдно линия сравнения нескольких значений в C

if(x == 1,2,3,4){ do something } 

что такое правильный синтаксис, чтобы сделать это в C? Я знаю, что запятая работает на каком-то другом языке, я не могу представить, как не иметь несколько разных проверок. Единственная вещь, которую я мог придумать это приходится делать

if((x == 1)||(x ==2) 

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

+0

К сожалению, это, как работает C. Вы должны проверять каждую комбинацию отдельно. –

+2

Дело в том, что C близко к оборудованию. Ваш CPU не может сравнивать одно значение с несколькими одновременно, это невозможно. На языках более высокого уровня, имеющих что-то вроде «если x находится в интервале [от 1 до n]», вы все равно получаете машинный код, похожий на 'if (x == item [0] || == item [1] ... Языки более высокого уровня скрывают эту неэффективность от программиста, в то время как C не пытается покрыть его сахаром. – Lundin

+0

А, да, я продолжаю забывать об этом и о том, что я пытаюсь изучить. @Lundin – grobot

ответ

5

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

switch(x) 
{ 
    case 1: 
    case 2: 
    case 3: 
    case 4: 
     //do something 
     break; 
} 

если число непрерывных вы можете использовать if (x >= 1 && x <= 4)

2

Прежде всего, Shorthands, as mentioned by mch in the other answer,

if ((x >= 1 && x <= 4) || (x >= 10 && x <= 40) || ....) //whatever condition 

В противном случае, (нет сравнения одной строки), если у вас все в порядке с использованием расширений gcc, есть функция, называемая case-range.

Здесь вы можете указать диапазон значений. Что-то вроде

case 1 ... 5: 

будет действителен.

Наконец, падение-через switch случай также может пригодиться, как

switch(val) 
{ 
    case 1: 
    case 2: 
    case 3: 
    case 4: 
    case 5: 
      break; 

    case 6: 
    case 7: 

      break; 

    default: 

      break; 
} 
Смежные вопросы