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;
}