c언어 break문 : 루프를 빠져나간다.

코딩/C 2019. 8. 29. 12:27

 C언어에서 break문이 있습니다. 이것도 상당히 많이 쓰는데요. break 문을 만나면, 현재 있는 루프, 예를 들어서 for나 while이나 do while 안에 있다면, 이러한 루프를 빠져나가는 역할을 합니다. switch 문에서도 쓸 수 있는데요. case문을 수행하고, 마지막에 break를 걸어버리면 switch문을 빠져 나올 거에요.

 

 보통 ps에서 switch를 쓸 일은 그리 많이 없으니, switch에서 break를 거는 경우는 다음에 다루기로 하고요. 루프에서 break를 걸어버리는 경우를 생각해 보겠습니다.

 

 


 예제 1을 봅시다.

 

 

 이 문장이 break가 없다고 생각해 봅시다. 7번째 줄에 주석이 쳐져 있다면, 다음과 같이 흐름도가 그려질 겁니다.

 

 

 그런가요? 즉, i가 0일 때부터 하나씩 증가하면서, 5보다 작다면 계속 루프를 돌면서 i를 계속 출력할 거에요. 그런데, print(i) 사이에, break 문이 걸려져 있어요. 그러면 이 때는 어떻게 될까요?

 

 

 break가 있는 루프는, 초록색으로 칠할 수 있어요. 그러면, 이것을 만나는 순간 바깥으로 나갈 건데요.

 

 

 이걸 다시 그려보면 요래 될 거에요. print(0)을 한 다음에 바로 break를 만나니까 루프를 빠져 나오겠네요. 그렇기 때문에, 0이 딱 한 번만 출력이 됩니다.

 

 

 예제 1의 수행 결과는 다음과 같습니다.

 

 


 백준 사이트에서 이런 문제를 본 적이 있을 겁니다. 테스트 케이스의 마지막 줄에는 0 0이 주어진다. 이런 건 어떻게 처리해야 할까요? 저는 이것을 오늘 배우는 것으로 많이 처리합니다.

 

 

 입력이 a(i) b(i)꼴로 들어오고, 빈 입력이 들어오지 않는다고 했을 때, 요런 식으로 짤 수 있을 거에요. 계속 입력을 받겠다. 루프의 조건이 계속 참이면 계속 돌 겁니다. 즉, 이런 식으로 짤 수는 있다는 겁니다.

 

 

 그런데, 이러면 입력을 못 받았는데도 계속 돌 거에요. 심지어 0 0이 입력이 되었는데도 종료가 안 될 거에요. 그러면 어떻게 해야 할까요? break를 쓰기는 해야 겠는데요.

 

 

 요렇게 쓰면 어떻게 되나요? 5 5를 입력을 받던, 3 3을 입력을 받던, 바로 1번만 입력을 받고 종료가 되어 버릴 거에요. 왜냐하면, 7번째 줄에서 scanf로 입력을 받으면, 바로 break를 수행하게 되는데요. 이것은 while(1)에 걸려있기 때문에, 이 루프를 빠져나가기 때문입니다. 그러면, 10번째 줄로 갈 거고, main 함수가 끝이 날 거에요.

 

 

 그러면 어떻게 해야 할까요? 언제 빠져나와야 하나요? a가 0이고 b가 0일 때 빠져나오게 하면 될 겁니다.

 

 

 이것을 코드로 구현하면 아래와 같습니다.

 

 

 a가 0이거나, b가 0인 경우, break 문을 수행하도록 하였습니다. while(1) 루프에서 빠져나가는 셈입니다. 그런데, 루프 하나만 빠져나갑니다. 2개, 3개를 한번에 빠져나갈 수는 없어요. 2개 3개를 한꺼번에 빠져나가려면 몇 가지 방법이 있는데요.

 

 저는 이런 상황이 발생할 경우, 함수를 따로 빼서 return문을 작성하는 식으로 많이 합니다.