, , start- > part1- > part2- > end, switch , .
enum state { start=1, part1, part2, end} mystate;
mystate = start;
do {
switch (mystate) {
case start:
case part1:
case part2:
if (part2_end_condition) mystate = end;
break;
}
} while (mystate != end);
, , /, :
var1 var2 var_end next_state
0 0 0 state1
0 1 0 state2
1 0 0 state3
1 1 0 state4
-1 -1 1 state_end // -1 represents "doesn't matter" here