오늘은 break문과 continue문에 대해 알아보도록 하겠습니다. 2개 모두 반복문에서는 빠질 수 없는 명령문이죠.
빠른 요약을 먼저 하고 정리를 진행하겠습니다.
break문은 반복문에서 만나면 즉시 for문을 탈출하게 된다. continue문은 break문과 다르게 for문을 빠져 나가지는 않고 그냥 패스합니다.
위 코드를 정상적으로 실행한다면, 3이 입력될 때까지 계속해서 컴퓨터가 물음을 반복할 것이고, 3이 입력이 되면 프로그램이 종료될 것 입니다.
figure.1의 for문을 살펴보면 좀 특이한 부분이 있습니다. 초기식, 조건식, 증감식 같은것이 한개도 없고 ";;"만 존재합니다. 그렇다면 이는 어떻게 실행이 되는것일까요? for문의 조건식이 따로 없으면 항상 '참'이라 인식 되기 때문에 위 for문은 언제나 참이 됩니다. 즉 무한히 for문의 내용이 실행된다는 것입니다.
그래서 만약 figure.2처럼 for문을 만든다면
figure.3같은 끔찍한 상황이...
figure.1에서 scanf를 통해 useranswer에 사용자가 입력한 수를 저장하고, 그리고 if문을 통해 무한히 값을 비교합니다. 입력값이 3이 맞다면 "맞추셨군요!" 가 출력이 되고 프로그램이 종료가 됩니다. 이때 프로그램을 종료시키는 코드 명령은 바로 break 입니다. break는 반복문에서 뺄수 없는 것으로서, for문에 조건식에 상관없이 실행이 되기만 하면 for문을 그대로 탈출 시켜 버립니다. 즉 break 아래의 어떠한 것들도 실행이 되지 않는 다는 것입니다.
그래서 figure.4에서는 break문을 먼저 만나기 때문에 a가 출력이 되지는 않고, figure.5에서는 a값을 출력먼저 하고 break문이 그 뒤에 나오기 때문에 정상적으로 출력 된 후 for문을 탈출합니다.
맨 처음 말씀드린 것처럼 continue문은 반복문을 나가는 것이 아니라 continue 문 이후에 부분을 패스하는 겁니다(반복문을 빠져나가는 것이 아닌)
figure.6을 보면 5의 배수만 제외하고 1부터 100까지 출력하는 반복문입니다. i값을 5로 나누어서 나머지가 0일때 continue를 실행한다(패스한다)는 뜻이죠 즉 printf("%d", i)에 입력이 되지 않는것 입니다.
성공적으로 실행하면 figure.7처럼 출력이 잘 되게 됩니다. continue는 break문 처럼 자기보다 아래에 있는 내용을 모두 무시한다는점은 같지만, break문은 루프를 빠져나가지만, continue는 다시 조건을 비교하고 반복하게 됩니다. 즉 카드게임에서 스킵과 같은 역할을 한다고 할수 있습니다.
문득 for문을 배우면서 이러한 생각은 들지 않았나요? if문 안에 if문을 넣을 수 있는 것 처럼 for문 안에도 for문을 넣을 수 있을까?(왜 이런생각이 드셨는지는 의문입니다 전 안들었거든요 ;;)
for문안에 for문을 넣은 예제는 figure.8과 같습니다. 구구단을 만드는 거죠. 위 구구단은 비록 for문이 2개나 들어가서 조금 복잡해 보이지만 원리는 간단합니다. 우선 i값에 1이 대입이 됩니다. 그런 다음 j를 초기값으로 갖는 for문이 계속해서 반복됩니다. 이 반복문이 완료 되기 전에는 i를 초기값으로 갖는 첫번째 반복분은 물론 실행이 되지는 않고 있습니다. 즉 1부터 9까지 i값에 곱을 한 값을 출력한 후, i값을 1 증가 시키고, 다시 2번째 반복문을 실행합니다.
자 마지막으로 퀴즈를 내고 오늘 마치겠습니다(교재에서 나옴 전 퀴즈 별로 안좋아합니다)
figure.9를 한번 어떤식으로 출력될 지 맞춰보세요!! 답은 스포방지를 위해 저 아래에 놓겠습니다.
미리 인사하겠습니다~ 많이 방문해주세요!
스
포
방
지
figure.11을 보면 i가 1이면 j가 출력되지 않고, i가 2가되면 j가 1부터 1까지, i가 3이되면 j는 1부터 2까지 순차적으로 출력되어 i가 9일때 j는 1부터 8까지 출력되어 figure.10과 같은 출력값이 나오게 된다(즉 i가 j보다 클때부터 출력이 된다)
'C language(c언어)' 카테고리의 다른 글
Switch문 (2) | 2024.01.29 |
---|---|
Loop 반복문 (while문) (do-while문) (0) | 2023.11.03 |
Number and Digit (수와 숫자) 십진법,이진법,16진법 (1) | 2023.09.01 |
C language(c언어) comment(주석 처리) (0) | 2023.08.31 |
Loop 반복문 (for) (2) | 2023.08.31 |