Thoát khỏi vòng lặp lồng nhau

theo em biết là lệnh break chỉ thoát ra được 1 vòng lặp thôi đúng không ạ, vậy nếu em muốn thoát ra khỏi tất cả các vòng lặp cùng lúc thì ngoài goto ra còn các nào khác không ạ

Bạn tạo 1 biến đánh dấu rằng bạn muốn thoát vòng lặp lồng nhau là được.

bool want_to_break_all = false;
for (int i = 0; ...; i++) {
    for (int j = 0; ...; j++) {
        if (lam_sao_do) {
            want_to_break_all = true;
            break;
       }
    }
    if (want_to_break_all == true) {
        break;
    }
}

Version xấu xí hơn:

bool want_to_break_all = false;
for (int i = 0; !want_to_break_all && (...); i++) {
    for (int j = 0; ...; j++) {
        if (lam_sao_do) {
            want_to_break_all = true;
            break;
       }
    }
}
3 Likes

em cảm ơn nhiều ạ !!!

Nếu có quá nhiều vòng lặp lồng nhau và bạn không muốn quá nhiều biến cờ, hãy dùng goto.

    for(int a = 0; a < 10; ++a){
        for(int b = 10; b < 20; ++b){
            if(b == 12){
                goto endLoop;
            }
            for(int c = 20; c < 30; ++c){
                if(c == 22){
                    goto endLoop;
                }
                printf("%d %d %d\n", a, b , c);
            }
        }
    }
    endLoop:
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?