Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.10;
Скачать: CL | DM;

Вниз

Отличие делфишного CASE от сишного SWITCH   Найти похожие ветки 

 
StriderMan ©   (2006-08-15 13:06) [0]

вот такой код на делфи к сожалению не прокатывает

procedure DoSmth(AVal: integer);
begin
 case AVal of
 1: ShowmEssage("1");
 2: ShowMessage("2");
 1..2: ShowMessage("1 or 2");
 end;
end;


насколько я помню, на сях такое сделать можно. Почему так?


 
Romkin ©   (2006-08-15 13:08) [1]

Потому что case выполняет только один пункт, первый из подходящих. После этого выходит из case.


 
Nic ©   (2006-08-15 13:08) [2]

Зачем нужна эта строка? :
1..2: ShowMessage("1 or 2");


 
Джо ©   (2006-08-15 13:09) [3]

В C при обработке каждого из вариантов в Switch"e не происходит выход из блока Switch (нужен break).


 
Ega23 ©   (2006-08-15 13:12) [4]

procedure DoSmth(AVal: integer);
begin
Case AVal of
 1..2 begin
            case AVal of
            1: ShowmEssage("1");
            2: ShowMessage("2");
            end;
            ShowMessage("1 or 2");
        end;
  else Showmessage("not (1 or 2)");
end;
end;

?


 
Desdechado ©   (2006-08-15 13:13) [5]

В Си этоточка входа, а выход только по break, которого может и не быть вовсе. В Паскале же выполняется всегда только один кусок, что, имхо, правильнее.

Джо ©   (15.08.06 13:09) [3]
Да, иногда это удобно, когда выполнение проходит по совокупности последовательных веток. Но чаще является причиной скрытых ошибок.
Если я правильно помню, в C# это заблокировали.


 
StriderMan ©   (2006-08-15 13:14) [6]


> Ega23 ©   (15.08.06 13:12) [4]

ну типа того. только это громоздко.


> Nic ©   (15.08.06 13:08) [2]

например в случае в каждом конкретном случае выполняются какие-то действия, но скажем в случае 1,2 нужно сделать нечто общее, а в случае 3,4 нечто другое общее.


 
Ega23 ©   (2006-08-15 13:15) [7]


> ну типа того. только это громоздко.


Громоздко логику извращённую вертеть.


 
Плохиш ©   (2006-08-15 13:16) [8]


> StriderMan ©   (15.08.06 13:06)
> Почему так?

Ответ на этот вопрос находиться в описаниях языков.


 
Джо ©   (2006-08-15 13:17) [9]

> [5] Desdechado ©   (15.08.06 13:13)
> Но чаще является причиной скрытых
> ошибок.

Согласен.


> Если я правильно помню, в C# это заблокировали.

Заблокировали. Пока break не поставишь, компилятор будет ругаться.


 
Rouse_ ©   (2006-08-15 13:17) [10]


> Потому что case выполняет только один пункт, первый из подходящих.
>  После этого выходит из case.

без бряка еще и на default выскочит.



Страницы: 1 вся ветка

Текущий архив: 2006.09.10;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.039 c
15-1156179734
GeLLeT
2006-08-21 21:02
2006.09.10
WinAPI


15-1155899398
Труп Васи Доброго
2006-08-18 15:09
2006.09.10
Пока!


2-1155831546
pvi
2006-08-17 20:19
2006.09.10
Сетевая папка или нет


2-1156316954
иван8511
2006-08-23 11:09
2006.09.10
Вывод строки на матричный принтер.


2-1155739609
Sele
2006-08-16 18:46
2006.09.10
обои jpeg





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский