개발자 데뷔!

[C/C++ 3.1] 다중 루프(for)문 탈출방법 본문

프로그래밍 언어/C

[C/C++ 3.1] 다중 루프(for)문 탈출방법

물꼮이 2022. 3. 10. 09:59

 

* '해당 루프' 의 의미 : 

     - 명령문을 감싸고 있는 가장 가까운 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