реклама на сайте
подробности

 
 
> "case XX of" в Си
repairDV
сообщение Mar 19 2012, 07:46
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 578
Регистрация: 7-11-06
Из: Хабаровск
Пользователь №: 22 044



Здравствуйте. В Delphi есть весьма полезная функция:
case ХХ of
0:...
1:
Не могу найти что-нибудь короткое аналогичное в Си.


--------------------
Маленький нанайца. А-а. А-а. Оморочком плыл. Маленький проточка. Осетра ловил.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Demeny
сообщение Mar 19 2012, 08:57
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237



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

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

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


--------------------
Сделано в Китае. Упаковано в России.
Go to the top of the page
 
+Quote Post
repairDV
сообщение Mar 19 2012, 10:23
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 578
Регистрация: 7-11-06
Из: Хабаровск
Пользователь №: 22 044



Цитата(Demeny @ Mar 19 2012, 19:57) *
Код
if(XX==0){
...
}
if(XX==1){
...
}
...

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

Там "else" нужно будет вставлять ещё, а то понимать не будет. Не, это длинно.


--------------------
Маленький нанайца. А-а. А-а. Оморочком плыл. Маленький проточка. Осетра ловил.
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 19 2012, 11:17
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(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;
}


Go to the top of the page
 
+Quote Post
repairDV
сообщение Mar 19 2012, 12:51
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 578
Регистрация: 7-11-06
Из: Хабаровск
Пользователь №: 22 044



Цитата(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 фигурные скобки нельзя? Да, комп с программой далеко, не на чём проверить.


--------------------
Маленький нанайца. А-а. А-а. Оморочком плыл. Маленький проточка. Осетра ловил.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 19 2012, 12:58
Сообщение #6


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



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

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

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

case N4:
case N5:
    DoSomethingElse();
    break;


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 05:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01436 секунд с 7
ELECTRONIX ©2004-2016