C

C언어를 가르칩니다.

C C언어를 가르칩니다.

while

while문을 알아봅니다.

while

귀찮아서 그림은 생략합니다.

정의

while. ~동안이라는 뜻입니다. ~인 반면에라는 부정적인 뜻도 있지만 우리는 영미권 사람이 아니므로 ~동안이라고 생각합니다. while문의 기본 형태는 다음과 같습니다.

while (/*condition*/)
    /*code*/

한국말로 바꾸면 다음과 같습니다.

while (/*매번 검사할 조건식*/)
    /*코드*/

/*매번 검사할 조건식*/이 참이면, 코드를 실행합니다. 실행할 코드가 여러 개면, 중괄호를 사용합니다.

용법

일반적인 용법

조건식만 검사하면 될 때 사용합니다.

#include <stdio.h>
#include <limits.h>
#include <math.h>

int main(void)
{
    int i=1;
    printf("%d이하인 정수 N을 입력하십시오.",(int)sqrt(INT_MAX));
    printf("1부터 N까지 출력합니다: ");
    scanf("%d",&N);
    if (N>sqrt(INT_MAX))
    {
      printf("%d는 INT_MAX의 제곱근보다 커서 오버플로우가 일어납니다.",N);
    }
    else
      while (i<=N)
      {
        printf("%d의 제곱은 %d입니다.\n",i,i*i);
        i++;
      }
}
sqrt(INT_MAX)앞에 (int)를 붙여주는 것을 캐스팅이라 합니다. sqrt(INT_MAX)는 double을 리턴하는데 %d는 int를 받기 때문에, (int)를 붙여주어서 double을 int로 변환해주어야 합니다.

재미있는 예제가 생각이 안 나네요.

무한루프

while로 간단한 무한루프를 만들 수 있습니다.

while (true)
{
    puts("Ctrl+C를 눌러 루프를 종료하십시오. 안 그러면 컴퓨터가 맛이 갑니다.");
}

실제로 맛이 가지는 않습니다.

 

무한루프는 for로도 만들 수 있습니다. 이건 토픽 for에 들어가야 할 것 같은데, 그냥 여기다 적겠습니다. for로 무한루프를 만들기 위해서는 알아야 할 게 있습니다. for의 기본 형태를 다시 봅시다.

for (/*expression*/;/*condition*/;/*expression*/)

여기 있는 expression, condition, expression은 모두 생략할 수 있습니다.

for (;;)

이렇게 할 수 있다는 말이죠. 이 경우 condition이 '없'습니다. 한국말로 바꾸면 '조건이 없'습니다. 조건이 없으면 뭐죠? 그렇죠. 무조건이죠. 이 루프는 무조건, 영원히 실행됩니다.

for (;;)
{
    puts("Ctrl+C를 누르지 마십시오...");
}
puts("안돼!");

condition만 생략하고 양옆의 expression을 넣어도 됩니다.

for (int i=1;;i++)
{
    printf("%d의 제곱은 %d입니다.\n",i,i*i);
}

얼마 지나지 않아 음수(혹은 런타임 에러?)가 뜨는 것은 당연한 일입니다. 오버플로우가 일어나니까요.

 

while보다는 for이 훨씬 자주 쓰입니다. 그래서 예제로 넣을 게 마땅히 없습니다.

break

while에서도 break를 쓸 수 있습니다. for에서의 쓰임과 같이, 루프를 중간에 끝냅니다.

int gohomecount=0;
while (true)
{
    puts("나: 집 가고 싶어요.");
    gohomecount++;
    if (gohomecount>100)
    {
        puts("선생님: 아유, 시끄러워! 그냥 가!");
        break;
    }
    puts("선생님: 야자해야지! 어딜 가려고!");
    putchar('\n');
}
puts("아싸!");

continue

while에서도 continue를 쓸 수 있습니다. 이 경우 조건식 검사로 다시 돌아갑니다.

for과 while의 유사성

for과 while은 상당히 비슷합니다. 사실 비슷하다고 말 안 해주면 비슷한 줄 모릅니다. 저도 그랬습니다.

가령, 다음과 같은 for 코드는,

for (int hour=8, minute=0; hour<24; minute++)
{
    if (minute==60)
    {
        minute=0;
        hour++;
    }
    printf("%d시 %d분입니다.\n",hour,minute);
}
puts("퇴근이다!");

이 while코드와 같습니다.

int hour=8, minute=0;
while (hour<24)
{
  if (minute==60)
  {
    minute=0;
    hour++;
  }
  printf("%d시 %d분입니다.\n",hour,minute);
  minute++;
}
puts("퇴근이다!");

 

과제

for토픽에서 쓴 치킨게임을 while문으로 만들어봅시다.

 

댓글

댓글 본문
작성자
비밀번호
버전 관리
truelight
현재 버전
선택 버전
graphittie 자세히 보기