で、俺ならこう書く。
頭の中でしか動かしていないので合ってるかどうかは自信ないが。

void f() {
 int state = 0;
 while (state == 0 && some_condition()) {
  something();
  state = check_state();
 }
 if (state == 4) {
  something();
 }
}

int check_state() {
 for (int e = 0; e <= 4; e++) {
  if (some_condition(e)) {
   return e;
  }
 }
 exit(-1); // not reached
}