Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
Tags
- /
- 도커 #Docker #배포 #Spring #MySQL #백엔드배포
- 도커 #docker #docker-compose.yml #도커컴포즈 #배포 #spring #mysql #docker-compose
Archives
- Today
- Total
개발자 데뷔!
[C/C++ 3.1] 다중 루프(for)문 탈출방법 본문
* '해당 루프' 의 의미 :
- 명령문을 감싸고 있는 가장 가까운 for문,
- 해당 명령문이 위치하고 있는 블럭
- 2중 for 문일 경우 하나만 탈출 1개
break : '해당루프' 블럭을 아예 끝냄
2차 반복문을 통째로 탈출
for (int i = 0; i < 5; i++) { // 1차 반복문
for (int j = 0; j < 3; j++) { // 2차 반복문
if (j == 2)
break;
}
}
continue : '해당 루프' 블럭 내에서 다음차례로 넘어감
현재 단계는 그만두고, 다음 단계 (2차 반복문의 j=3) 으로 넘어감
for (int i = 0; i < 5; i++) { // 1차 반복문
for (int j = 0; j < 3; j++) { // 2차 반복문
if (j == 2)
continue;
}
}
-----------------------------------------------------------------------------------------------------------------------------------
그렇다면
2중 for문 전체를 한번에 탈출 하는 방법은 ?
- 없다!
굳이 꼽자면, 다음과 같이 세가지로 나눌 수 있다
1. 해당 기능을 함수로 따로 빼 return 하기
return : 즉시 함숫값을 전달하며, 함수를 끝냄. (즉, 이중 for문도 통째로 끝낼 수 있음)
* main함수에서, 이중 for문 내에, 다른 함수를 실행 하는 것은 최악 !
int func() {
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 7; j++) {
if (j ==3)
return 0; // return 하면, 바로 함수 통째로 탈출하며 이중 for문 끝남
}
}
}
int main() {
func(); // main함수에서, 이중 for문 내에, 다른 함수를 실행 하는 것은 최악 !
return 0;
}
2. flag 를 세워, (2차 반복문 → 1차 반복문) 차례로 탈출
int flag = 0; // flag 새로 갱신
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
if (j == 2){
flag = 1; // flag 세우고
break; // break : 2차 반복문 탈출
}
}
if (flag == 1) // flag 사용 == 2차 반복문을 탈출한 것이면,
break; // break : 1차 반복문도 마저 탈출
}
3. goto 함수를 사용해 지정한 위치(레이블)로 바로 이동
다중 for문을 한번에 빠져나오며, 지정한 레이블 (EXIT)로 이동 !!
for (int i = 0; i < 10; i++){
for (int j = 0; j < 10; j++){
if (num1 == 20)
goto EXIT; // EXIT 레이블로 곧장 이동 (이중 for문 둘다 탈출)
num1++;
}
}
EXIT: // 레이블 EXIT
printf("%d\n", num1); // action 취하기
EX) 2차 for문 탈출 with flag
// 위의 다른 함수는 생략
int main() {
char select;
int flag;
string command; // 비교할 때 쉽기 위해 string으로 지정
//7번 입력받아 실행
for (int t = 0; t < 7; t++) {
cin >> select >> command;
flag = 0; // flag 새로 갱신
//array 판에서 입력받은 문자 찾기
for (int i = 0; i < 5; i++) { // 반복문 제어 : break = '현재'에서만 빠져나감, continue ='현재'에서만 다음 반복문 으로 빠져나감
for (int j = 0; j < 3; j++) {
if (arr[i][j] == select){ // 입력받은 문자를 찾으면
move(command, i, j); // 명령을 실행한다 //한번만 실행하면 바로 break
flag = 1; // 여기서 continue 하면 2중 for문 완전히 안나가고 한 for문 만 나감 !! (break를 해도 마찬가지) 즉, flag를 세워 2중 for문을 차례로 탈출하기 !
break; // break 안하면, 함수로 기껏 위치 바꿔놓은 배열 다시 찾아 함수 실행 한번 더함 ********
}
}
if (flag == 1) // 다중 for문 탈출 위해 flag 사용
break;
}
}
//출력
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
cout << arr[i][j];
}
cout << endl;
}
return 0;
}
'프로그래밍 언어 > C' 카테고리의 다른 글
[C/C++ 3.3] 2차원 배열 초기화 (0) | 2022.03.11 |
---|---|
[C/C++ 3.2] 1차원 배열 초기화 (0) | 2022.03.11 |
[C/C++ 3.0] for문 마스터 (0) | 2022.03.10 |
[C/C++ 1.8] 연산자 sizeof (0) | 2022.03.10 |
[C/C++ 1.5] Register 변수 (0) | 2022.03.10 |