의견.png

While

위키원
audrbchzl (토론 | 기여)님의 2021년 7월 9일 (금) 10:58 판
이동: 둘러보기, 검색

while은 영어로는 ~동안에 라는 의미를 가지고 있고 프로그래밍에서는 조건 반복문이다. while 루프는 if문의 반복으로 생각할 수도 있다.

문법

while문의 문법은 다음과 같다.

while(조건식)
{
   명령문 1;
   명령문 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문으로 작성하자(뭐, 당연한 것 아니겠는가. 배운 반복문이 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는 숫자를 우측정렬한다.

for문과의 차이점

while문은 조건식을 검사하여 참이면 명령을 수행하고 for문처럼 증감식으로 변숫값을 증감시킨다. 그리고 다시 조건식과 비교하여 특정한 명령을 반복 수행한다. 따라서 다음과 같이 for문으로 쓸 수 있다.

[while문]
초기화; 1 ①
while(조건식) ②
{
  ③ 명령문 1; 
       .
       .
  ④ 증감식; 
}
[for문]
for(초기화;,조건식;,증감식)
      ①      ②      ④
{
  ③ 명령문 1;
     명령문 2;
        .
        .
}

일반적으로 for문은 괄호 안에서 초기화를 하지만 while문은 while문 외부에서 초기화를 한다.물론 for문에서도 for문 시작 전에 초기화를 할 수 있으나 일반적이지 않다.

무한 반복

종료되지 않는 반복문을 무한 반복(infinity loop)이라고 한다. 일반적으로 어떤 조건을 사용하여 조건에 맞으면 반복시키지만 경우에 따라서는 무한 반복을 사용하기도 한다. while문에서 무한 반복을 사용하는 방법은 다음과 같다.

[while문]
 while(1) {
    문장
     .
     .
}

while문에서는 while(1)처럼 조건식에 값 1을 주어 조건이 항상 참이라는 것을 나타낸다. 이와 같은 프로그래밍에서는 값이 0인 경우 거짓이고 그 외에 값이 있는 경우는 참이다. 위의 경우는 while(2)를 해도 무한 반복한다. 그러나 일반적으로 while(1)이라는 표현을 더 많이 쓴다. 무한 반복에서 빠져나오려면 break문을 이용하거나 디버깅을 강제 종료하는 방법이 있다.

각주

참고자료

같이 보기

  의견.png 이 While 문서는 프로그래밍에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.