While
while은 영어로는 ~동안에 라는 의미를 가지고 있고 프로그래밍에서는 조건 반복문이다. while 루프는 if문의 반복으로 생각할 수도 있다.
목차
while 루프[편집]
대부분의 컴퓨터 프로그래밍 언어에서 while 루프는 반복문의 일종으로, 주어진 불린 자료형 조건을 기반으로 코드가 반복적으로 수행할 수 있게 도와준다. 이 while 루프는 if 문의 반복으로 생각할 수도 있다. while은 코드와 조건의 블록을 이루고 있다. 조건이 true라면 블록 안의 코드는 실행한다. 조건이 false가 될 때까지 이 작업을 반복한다. 블록을 실행하기 전에 while 루프를 검사하므로 제어 구조는 사전 시험 루프(pre-test loop)로 불리기도 한다. 루프를 실행한 뒤에 조건을 시험하는 do while 루프와 비교된다.
x = 0; while(x < 3) { x++; }
먼저 x가 3보다 작은지를 검사하고 작을 경우 1씩 숫자를 더한다. 조건을 다시 검사하고 다시 실행하여 변수 x가 값 3을 가질 때까지 이 과정을 반복한다. 물론 언제나 "true"라는 조건을 성립하게 만들 수도 있으며, 이때 무한 반복을 만들어 낸다. 고의로 이러한 루프를 만들 경우, break문과 같은 다른 제어 구조를 사용하여 루프를 끝낼 수 있다.[1]
문법[편집]
while문의 문법은 다음과 같다.
초기변수 선언;
while(조건식) { 명령문 1; 명령문 2; . . . 증감식 }
while문 문법은 초기 변수를 선언해주고 while문을 코딩해준다. 그다음 조건식을 코딩하고 그다음 명령문(실행문)을 작성하고 맨아래에 while문을 탈출할 수 있는 증감식 또는 break문을 사용하여 다음 코드로 넘어간다. 만약 무한루프를 사용하고 싶으면 조건식에 상수를 넣어주면 된다.[2]
예제[편집]
제곱표 출력하기[편집]
제곱수를 표 형식으로 출력하는 프로그램을 만드는 순서는 우선 사용자로부터 숫자 n을 받는다. 그 다음엔 n개 줄을 출력할 것이고, 1에서 n까지 각 줄에는 해당 번째 숫자와 그 숫자의 제곱수를 출력할 것이다.
본 프로그램은 제곱수 표를 출력합니다.
본 표의 크기를 결정해주세요: 5
1 1
2 4
3 9
4 16
5 25
이 프로그램을 제곱수를 출력하고 싶은 만큼의 개수를 n이라는 변수에 저장하게 만들 것이다. 숫자 i와 그 숫자의 제곱수를 지속적으로 출력하는 루프가 필요할 것이고, 시작은 i가 1과 같은 때이다. i가 n보다 작거나 같을 때 루프는 지속적으로 실행될 것이다. 매 루프가 실행될 때마다 i에 1을 더해줄 것이다. 우선 루프를 while문으로 작성한 코드는 다음과 같다.
#include <stdio.h>
int main(void) { int i; int n;
printf("본 프로그램은 제곱수 표를 출력합니다.\n"); printf("본 표의 크기를 결정해주세요: "); scanf("%d", &n);
i = 1; while (i <= n) { printf("%10d%10d\n", i, i * i); ++i; }
return 0; }
위의 실행 예제에도 보이듯이, square.c 프로그램은 숫자를 매우 규칙적으로 출력한다. 이는 변환규격을 %d 대신 %10d를 사용함으로써 얻는 효과다. 출력 길이가 지정된다면 printf는 숫자를 우측정렬한다.[3]
for문과의 차이점[편집]
while문은 조건식을 검사하여 참이면 명령을 수행하고 for문처럼 증감식으로 변숫값을 증감시킨다. 그리고 다시 조건식과 비교하여 특정한 명령을 반복 수행한다. 따라서 다음과 같이 for문으로 쓸 수 있다.
[while문] 초기화; 1 ① while(조건식) ② { ③ 명령문 1; . . ④ 증감식; }
[for문] for(초기화;,조건식;,증감식) ① ② ④ { ③ 명령문 1; 명령문 2; . . }
일반적으로 for문은 괄호 안에서 초기화를 하지만 while문은 while문 외부에서 초기화를 한다.물론 for문에서도 for문 시작 전에 초기화를 할 수 있으나 일반적이지 않다.[2]
무한 반복[편집]
종료되지 않는 반복문을 무한 반복(infinity loop)이라고 한다. 일반적으로 어떤 조건을 사용하여 조건에 맞으면 반복시키지만 경우에 따라서는 무한 반복을 사용하기도 한다. while문에서 무한 반복을 사용하는 방법은 다음과 같다.
[while문] while(1) { 문장 . . }
while문에서는 while(1)처럼 조건식에 값 1을 주어 조건이 항상 참이라는 것을 나타낸다. 이와 같은 프로그래밍에서는 값이 0인 경우 거짓이고 그 외에 값이 있는 경우는 참이다. 위의 경우는 while(2)를 해도 무한 반복한다. 그러나 일반적으로 while(1)이라는 표현을 더 많이 쓴다.
생략과 탈출(break,continue,return)[편집]
while문의 가장 큰 장점은 무한 루프를 만들기 쉽다는 것이다. 프로그램을 짜다보면 일단 무한루프를 만들어놓고 어떤 특정 입력이나 조건이 들어왔을때 무한루프를 빠져나오게하는 방식으로 프로그램을 짤때가 많다. 이러한 경우 for문보다 while문이 유용하게 쓰인다.
break문은 반복문을 실행 중지할때 사용된다. 만약 반복문이 중첩되어있을 경우 break문은 가장 가까운 반복문만 종료 시킨다. 그러므로 이중으로 쌓여있는 반복문을 모두 중지 시키려면 가장 바깥쪽에 있는 반복문에 라벨을 붙이고 break 라벨이름; 이렇게 사용해야 한다.
#include int main(){ while(1){
printf("while문 실행\n"); break;
printf("bareak문 뒷문장은 실행되지 않습니다.\n"); } printf("프로그램을 종료합니다."); }
실행하게 되면 break 뒤의 코드는 실행되지 않고 while문이 break문에 의해 중지된다.
continue문은 반복문을 종료하지 않고 계속 반복을 수행한다. continue을 사용했을경우 continue밑에있는 코드는 생략하고 바로 다음 반복문으로 간다.
#include int main(){ int i = 0; while(i<10){ i++; printf("while문 실행\n"); continue; printf("continue문 뒷문장은 실행되지 않습니다.\n"); } printf("프로그램을 종료합니다."); }
실행하게 되면 "while문 실행"이라는 텍스트가 10번 나오게 된다. 하지만 continue 뒤의 코드는 실행되지 않는다. 왜냐하면 continue에서 아래 코드까지 가지 않고 다시 while문을 실행시키는 알고리즘이라 그렇다. 이런식으로 0부터 9까지 총 10번 반복하고 while문의 조건이 false가 되어 while문을 빠져나온 후 "프로그램을 종료합니다" 라는 문구가 뜬다.
return문은 속해있는 함수나 프로그램을 즉시 종료시킨다.[4]
각주[편집]
- ↑ 〈while 루프〉, 《위키백과》
- ↑ 2.0 2.1 문호석, 손명호, C로 시작하는 컴퓨터 프로그래밍, 《㈜한빛아카데미》
- ↑ , 〈while문 - C 프로그래밍: 현대적 접근〉, 《위키독스》, 2020-12-03
- ↑ , 〈while문 사용법 & 예제 총정리〉, 《코딩팩토리》, 2019-07-23
참고자료[편집]
- 〈while 루프〉, 《위키백과》
- 문호석, 손명호, C로 시작하는 컴퓨터 프로그래밍, 《㈜한빛아카데미》
- 〈while문 - C 프로그래밍: 현대적 접근〉, 《위키독스》, 2020-12-03
- 〈while문 사용법 & 예제 총정리〉, 《코딩팩토리》, 2019-07-23
같이 보기[편집]