Форум: "Основная";
Текущий архив: 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