What is a neat way of breaking out of many for loops at once?

后端 未结 14 1492
既然无缘
既然无缘 2020-12-28 19:33

Suppose I need to break out of three or four nested for loops at once at the occurence of some event inside the innermost loop. What is a neat way of doing that?

14条回答
  •  既然无缘
    2020-12-28 19:45

    One way to do it is a state machine. But i would still use goto. It's much simpler. :)

    state = 0;
    while( state >= 0){
        switch(state){
            case 0: i = 0; state = 1; // for i = 0
            case 1:
                i++; 
                if (i < 100)   // if for i < 100 not finished
                    state = 2; // do the inner j loop
                else
                    state = -1; // finish loop
            case 2: j = 0; state = 3; // for j = 0
            case 3: 
                j++;
                if (j < 100)  // if j < 100 not finished
                    state = 4 // do the inner k loop
                else
                    state = 1; // go backt to loop i
                break;
            case 4: k = 0; state = 5;
            case 5:
                k++;
                if (k == 50){
                    state = -1;
                    break;
                }
                if (k < 100) // if k loop not finished
                    state = 5; // do this loop
                else
                    state = 3; // go back to upper loop
                break;
            default : state = -1;
        }
    }
    

提交回复
热议问题