Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: "case XX of" в Си
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
repairDV
Здравствуйте. В Delphi есть весьма полезная функция:
case ХХ of
0:...
1:
Не могу найти что-нибудь короткое аналогичное в Си.
aaarrr
switch(XX)
{
case 0:
case 1:
...
}
AHTOXA
Уточнение. Чтобы было как в паскале, надо писать break в конце каждой метки:
Код
switch(XX)
{
    case 0:
        .....
        break;
    case 1:
        .....
        break;
}

aaarrr
Ну а совсем правильно было бы послать читать букварь, на самом деле. Ибо вопрос как раз такого толка.
Demeny
Цитата(repairDV @ Mar 19 2012, 11:46) *
Не могу найти что-нибудь короткое аналогичное в Си.

Код
if(XX==0){
...
}
if(XX==1){
...
}
...

... и никаких break-ов ...
MrYuran
Цитата(Demeny @ Mar 19 2012, 12:57) *
... и никаких break-ов ...
Код
...
if(XX==100){
...
}
if(XX==101){
...
}
...

Сомневаюсь, что в этом случае компилятор додумается до таблицы переходов
repairDV
Цитата(Demeny @ Mar 19 2012, 19:57) *
Код
if(XX==0){
...
}
if(XX==1){
...
}
...

... и никаких break-ов ...

Там "else" нужно будет вставлять ещё, а то понимать не будет. Не, это длинно.
Demeny
Цитата(repairDV @ Mar 19 2012, 14:23) *
Там "else" нужно будет вставлять ещё, а то понимать не будет.

Не нужно.
adnega
Цитата(repairDV @ Mar 19 2012, 14:23) *
Там "else" нужно будет вставлять ещё, а то понимать не будет. Не, это длинно.

Для коротких блоков удобно пользоваться 'switch', 'case' и 'break'

Код
switch(cond)
{
  case 0: x = 17; break;
  case 1: y = -3; break;
  case 2 ... 5: a = 2; break;
  default: z = 0; break;
}


Если "пожирнее", то 'if' - 'else if' - 'else'

Код
if(state == STATE_IDLE)
{
  to = 0;
  func_init();
}
else if(state == STATE_WORK)
{
  to = 0;
  func_work();
  state = STATE_LAST;
}
else if(state == STATE_LAST)
{
  to = 0;
  func_last();
  state = STATE_IDLE;
}
else
{
  func_undef();
  state = STATE_IDLE;
}


repairDV
Цитата(adnega @ Mar 19 2012, 22:17) *
Для коротких блоков удобно пользоваться 'switch', 'case' и 'break'

Код
switch(cond)
{
   case 0: x = 17; break;
   case 1: y = -3; break;
   case 2 ... 5: a = 2; break;
   default: z = 0; break;
}

А после case фигурные скобки нельзя? Да, комп с программой далеко, не на чём проверить.
MrYuran
Цитата(repairDV @ Mar 19 2012, 16:51) *
А после case фигурные скобки нельзя? Да, комп с программой далеко, не на чём проверить.

Можно, но break все равно нужен, иначе программа дальше подряд пойдет.
значения перед двоеточием в кейсах выполняют роль локальных меток, а в GCC можно даже указатели на них сделать.

Зато можно это свойство использовать для группового выбора.
Например:
Код
case N1:
case N2:
case N3:
    DoSomething();
    break;

case N4:
case N5:
    DoSomethingElse();
    break;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.