Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];

Вниз

Оператор SWITCH(C++) -> CASE   Найти похожие ветки 

 
Samael6   (2003-10-17 12:22) [0]

Господа, кто знает, как можно переделать Сишный оператор SWITCH в Паскалевский CASE. Проблема в том, что в С можно делать так:
[оператор выбора]
первый вариант, break;
второй вариант;
третий вариант, break;
т.е если [оператор выбора] выбрал второй вариант, то управление перейдет сначала на обработчик второго, а затем третьего варианта. А как сделать это на Паскале(Delphi)? Желательно не пользоваться операторами Label & GOTO.
Заранее благодарен!


 
Игорь Шевченко   (2003-10-17 12:25) [1]

Скопировать код третьего варианта в дополнение к второму. Или через goto, не такой уж это зверь страшный, как его малюют.


 
Vitaly   (2003-10-17 12:26) [2]

case i of
1: ....
2,3: ....
if i = 3 then ....
.....


 
Плохиш_   (2003-10-17 12:26) [3]

Через case никак. Используй if


 
AIDix   (2003-10-17 12:26) [4]

Приведи пример нужного SWITCH


 
Samael6   (2003-10-17 12:28) [5]


> AIDix

Вообще-то код на АСМЕ, но сдесь бы очень подошел SWITCH...


 
Verg   (2003-10-17 12:28) [6]


> т.е если [оператор выбора] выбрал второй вариант, то управление
> перейдет сначала на обработчик второго, а затем третьего
> варианта. А как сделать это на Паскале(Delphi)?


Не, прямо так в Паскале не сделать. Придется либо goto-ями, либо объединять код "вотрого варианта" в локальную процедуру и писать так:

вариант два : docase2;
вариант три : begin docase2; docase3; end;
......


 
Samael6   (2003-10-17 12:31) [7]


> Verg

Спасибо придется так и делать


 
Verg   (2003-10-17 12:32) [8]

Не, че-то я "прогнал" :)))

> Не, прямо так в Паскале не сделать. Придется либо goto-ями,
> либо объединять код " третъего варианта" в локальную процедуру
> и писать так:
>
> вариант два : begin docase2; docase3; end;
> вариант три : docase3;
> ......


 
AIDix   (2003-10-17 12:44) [9]

Ну попробуй с goto так

var BreakResult:Boolean;

const Break = false;
NoBreak=true;

procedure BreakProc(Value:Boolean);
begin
BreakResult:=Value;
end;

procedure Switch( Sw:Integer );

begin
BreakResult:=false;
if (Sw= xx)or(BreakResult) then
begin MyProc;
BreakProc(Break);
end;
....
и в том же духе ( конструкции ужасные и не оптимезированные так что просьба не ругаться на меня и веньчестерами не закидывать :))


 
Vitaly   (2003-10-17 12:45) [10]

и я :)

case i of
1: ....
2,3: begin
if i = 2 then ....
......
end;
4: ....
.....


 
Плохиш_   (2003-10-17 12:53) [11]

repeat
if первый вариант then begin первый вариант; break; end;
if второй вариант then begin второй вариант; end;
if третий вариант then begin третий вариант; break; end;
...
until true;


 
Игорь Шевченко   (2003-10-17 13:04) [12]

И тестов не надо :))) Сразу все видно :)))



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

Форум: "Основная";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.011 c
3-98523
nortsov
2003-10-08 08:50
2003.10.30
проблема, update для обновления записей в связанных таблицах


3-98449
hursand
2003-10-10 13:46
2003.10.30
DBGRID


1-98700
V-A-V
2003-10-21 08:53
2003.10.30
Это глюк или что ?


3-98448
wHammer
2003-10-10 12:07
2003.10.30
Проблема с TSession


7-98904
DimaK
2003-08-08 13:22
2003.10.30
Hint





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский