IVS/C 프로그래밍

[C++] 중첩 반복문 - continue, break

코곰_ 2025. 1. 8. 15:55

 

 

 

충격 사실.........

중첩 for문에서 break를 걸면 가장 가까운 for문만 빠져나오는 것이었다. 

 

 

 

continue의 동작 방식

 

  • continue는 현재 반복문에서 남은 실행을 건너뛰고 다음 반복으로 넘어가도록 한다.
  • 중첩된 반복문에서 continue는 가장 가까운 반복문에서만 동작한다.

 

 

 

break의 동작 방식

 

  • break는 현재 실행 중인 반복문을 즉시 종료시키고, 반복문 밖으로 제어를 넘긴다.
  • 중첩된 반복문에서 break는 가장 가까운 반복문만 종료한다.

 

 

 

따라서, 다음과 같이 실행하면 내부의 for문에서만 break가 동작한다. 즉 외부 for문은 계속 뱅글뱅글 돌아가고 있음....

#include <bits/stdc++.h>
using namespace std;

int main(void)
{       
        int arr[5][5] = {0};
        int t = 1;
        for(int x=4; x>=0; x--){
                for(int y=0; y<5; y++){
                        arr[y][x] = t++;
                }
        }
        bool flag = false;
        int n; cin >> n; // 4
        int cnt = 0;
        for(int i=0; i<5; i++){
                for(int j=0; j<5; j++){
                        cnt++;
                        if(arr[i][j] % n == 0){
                                flag = true;
                                break;
                        }
                }
        }
        if(flag) cout << "존재";
        else cout << "존재하지 않음";
        cout << cnt; // 12

        return 0;
}

 

 

 

 

 

 

 

 

 

중첩 for문을 한번에 나가려면?

크게 3가지 방법이 존재한다. 그러나 1번 flag 변수를 사용하는 방식을 권장함.

 

1. flag 변수를 이용: 2차 반복문-> 1차 반복문 순으로 나간다. (권장)

#include <bits/stdc++.h>
using namespace std;

int main(void)
{       
        int arr[5][5] = {0};
        int t = 1;
        for(int x=4; x>=0; x--){
                for(int y=0; y<5; y++){
                        arr[y][x] = t++;
                }
        }
        bool flag = false;
        int n; cin >> n; // 4
        int cnt = 0;
        for(int i=0; i<5; i++){
                for(int j=0; j<5; j++){
                        cnt++;
                        if(arr[i][j] % n == 0){
                                flag = true;
                                break;
                        }
                }
                if(flag) break;
        }
        if(flag) cout << "존재";
        else cout << "존재하지 않음";
        cout << cnt; // 2

        return 0;
}

 

 

2. 함수를 따로 생성해, return하기

#include <iostream>
using namespace std;

void process() {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (i == 1 && j == 1) {
                return;  // 함수 종료, 즉시 모든 반복문을 빠져나감
            }
            cout << "i = " << i << ", j = " << j << endl;
        }
    }
}

int main() {
    process();
    cout << "Exited all loops." << endl;

    return 0;
}

 

 

3. goto를 사용 (비추)

#include <iostream>
using namespace std;

int main() {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (i == 1 && j == 1) {
                goto exit_loop;  // 중첩된 반복문 전체를 빠져나감
            }
            cout << "i = " << i << ", j = " << j << endl;
        }
    }

exit_loop:
    cout << "Exited all loops." << endl;

    return 0;
}