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

Вниз

Оператор 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
8-98748
Ilg
2003-06-29 19:10
2003.10.30
Ограничение области рисования


3-98468
AndrewK
2003-10-09 17:56
2003.10.30
Как определить, какая картинка в Stream?


1-98711
Alesha aka Pokemon
2003-10-21 09:30
2003.10.30
Компонент TurboPower Product Suite


3-98511
bss
2003-10-09 11:42
2003.10.30
Как в SQL-операторе SELECT вывести разницу в днях между датами?


3-98462
zergey
2003-10-10 10:28
2003.10.30
запросы клиента