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

 
 
> "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
Ответов (1 - 10)
aaarrr
сообщение Mar 19 2012, 07:56
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



switch(XX)
{
case 0:
case 1:
...
}
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Mar 19 2012, 08:24
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Уточнение. Чтобы было как в паскале, надо писать break в конце каждой метки:
Код
switch(XX)
{
    case 0:
        .....
        break;
    case 1:
        .....
        break;
}



--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 19 2012, 08:35
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Ну а совсем правильно было бы послать читать букварь, на самом деле. Ибо вопрос как раз такого толка.
Go to the top of the page
 
+Quote Post
Demeny
сообщение Mar 19 2012, 08:57
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 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
MrYuran
сообщение Mar 19 2012, 09:07
Сообщение #6


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

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



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

Сомневаюсь, что в этом случае компилятор додумается до таблицы переходов


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
repairDV
сообщение Mar 19 2012, 10:23
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 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
Demeny
сообщение Mar 19 2012, 10:49
Сообщение #8


Знающий
****

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



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

Не нужно.


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


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 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
Сообщение #11


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

Группа: Свой
Сообщений: 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 Текстовая версия Сейчас: 29th June 2025 - 14:21
Рейтинг@Mail.ru


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