C 언어 - 반복문 while

컴퓨터/C

728x90
반응형

반복문은 왜 필요한가

프로그램에서 반복문은 사용자가 만든 소스코드 구조를 반복적으로 활용하기 위해 필요합니다. 

반복문의 대표적인 기본 예시인 구구단을 한번 생각해볼까요? 2단을 출력한다고 가정해 봅시다.

9번의 출력문을 여러분의 소스코드에 작성해야 될 것입니다.

#include<stdio.h>
int main()
{
    printf("2 * 1 = 2");
    printf("2 * 2 = 4");
    printf("2 * 3 = 6");
    .....
}

구구단만 해도 엄청나게 많은 소스코드를 작성해야 될 것입니다. 

우리는 변수와 상수의 개념을 알고 C언에서 사용할 수 있습니다. 여기에 반복문의 개념을 알고 사용한다면 아주 효율적인 소스코드를 만들 수 있게 될 것입니다.

 

반복문의 종류

C언어에서 제공하는 반복 문법은 3가지가 있습니다.

  • while문
  • for문
  • do while문

본문에서는 while문을 알아보도록 하겠습니다.

 

반복문 while

이 while반복문은 보통 특정 이벤트가 발생할 때까지 무한으로 반복하는 경우에 많이 사용하는 반복문입니다. 

사용 방법은 다음과 같습니다.

while(조건or조건식)
{
  소스코드
}
  • while문의 범위는 중괄호 {}로 표현합니다. 반복할 영역의 지정
  • while문의 조건 or 조건식은 괄호() 안에 작성합니다.
  • 조건 or조건식이 0이면 조건문을 실행하지 않습니다.
  • 0이 아닌 다른 값이면 반복문을 실행합니다.
  • 반복문의 마지막까지 실행된다면 반복문의 조건 or조건문을 다시 확인해 반복문 실행 여부를 결정합니다.

사용해보기

예제 1 ) 기본 형태 (무한 반복)

#include <stdio.h>

int main()
{
	while (1)
	{
		printf("반복문의 조건은 1 입니다.\n");
	}
	while (0)
	{
		printf("반복문의 조건은 0 입니다.\n");
	}
}

무한 반복으로 반복문을 돌리는 형태입니다. 반복문의 마지막에 알아볼 제어문과 함께 사용을 하는 형태입니다. 조건이 만족하는 경우 무한하게 반복을 합니다.

 

예제 2 ) 구구단 2단 출력해보기

#include <stdio.h>

int main()
{
	int num = 2;
	int num_2 = 1;

	while (num_2 <= 9)
	{
		printf("%d * %d = %d\n", num, num_2, num * num_2);
		//num_2 = num_2 + 1;
		//num_2 += 1;
		num_2++;
	}
}

위의 소스코드를 해석하자면 다음과 같습니다.

  • 변수 2개를 선언한다 num, num_2 
  • while문의 조건 num_2 보다 9가 크거나 같으면 반복문을 실행한다. 
  • printf를 통해 두 변수의 값과 곱한 값을 출력한다.
  • 이후 num_2의 크기를 1 증가시킨다. 
  • 다시 while문의 조건을 확인하고 반복문의 실행 여부를 판단한다.

예제 3 ) 구구단 단 출력해보기 - 중첩 while문 사용 

 


한번 while문 2개를 사용해서 만들어 보세요!

결과 보기

더보기
#include <stdio.h>

int main()
{
	int num = 2;
	int num_2 = 1;

	while (num <= 9) // 1번째 반복문
	{
		while (num_2 <= 9) //2번째 반복문
		{
			printf("%d * %d = %d\n", num, num_2, num * num_2);
			num_2++;
		}
		printf("\n");
		num++;
		num_2 = 1; // 2번째 반복문을 다시 1부터 시작하기 위해서 값 초기화
	}
}
  • 구조가 조금 복잡해 졌지만 동작 원리는 같습니다.
  • 1번째 반복문의 진입
  • 2번째 반복문의 진입
    • 출력
    • num_2 증가
    • 2번째 반복문 조건 만족시 까지 반복
  • 1번째 반복문 안의 줄넘김 출력
  • num증가
  • num_2의 값이 현재 9이므로 다시 1로 변경 (2번째 반복문의 재진입을 위해)

이런 식으로 다양한 방법으로 활용하여 소스코드를 효율적으로 작성할 수 있습니다.

예제 4 ) 인터페이스에 반복문 활용해 보기 

아래 예제를 무한 반복하여 모든 명령 수행 시 다시 초기화면으로 갈 수 있게 해 보세요

(main_menu진입 이후부터!)

#include <stdio.h>

int main()
{
	int main_menu;
	int sub_menu;

	printf("플레이어 육성 게임\n");
	printf("1.불러오기\n");
	printf("2.새로하기\n");
	printf("3.종료\n");
	printf("원하는 메뉴를 선택 하세요 : ");
	scanf_s("%d", &main_menu);
	switch (main_menu)
	{
	case 1:
	case 2:
		printf("1.정보 확인하기\n");
		printf("2.사냥터로 이동\n");
		printf("3.상점으로 이동\n");
		printf("4.메인화면으로 이동\n");
		printf("5.게임 종료하기\n");
		printf("원하는 메뉴를 선택 하세요 : ");
		scanf_s("%d", &sub_menu);

		switch (sub_menu) // 메뉴안의 메뉴 !
		{
		case 1:
			printf("정보 확인메뉴에 들어왔습니다.\n");
			break;
		case 2:
			printf("사냥터 이동메뉴에 들어왔습니다.\n");
			break;
		case 3:
			printf("상점 이동 메뉴에 들어왔습니다.\n");
			break;
		case 4:
			printf("메인 화면으로 이동 메뉴에 들어왔습니다.\n");
			break;
		case 5:
			printf("게임 종료하기 메뉴에 들어왔습니다.\n");
			break;
		default:
			printf("잘못된 값을 입력했습니다.\n");
			break;
		}
		break;
	case 3:
		printf("게임을 종료 합니다.\n");
		break;
	default:
		printf("잘못된 값을 입력했습니다.\n");
		break;
	}
}

결과 보기

더보기
#include <stdio.h>

int main()
{
	int main_menu;
	int sub_menu;

	printf("플레이어 육성 게임\n");
	printf("1.불러오기\n");
	printf("2.새로하기\n");
	printf("3.종료\n");
	printf("원하는 메뉴를 선택 하세요 : ");
	scanf_s("%d", &main_menu);
	while(1)
	{
		switch (main_menu)
		{
		case 1:
		case 2:
			printf("1.정보 확인하기\n");
			printf("2.사냥터로 이동\n");
			printf("3.상점으로 이동\n");
			printf("4.메인화면으로 이동\n");
			printf("5.게임 종료하기\n");
			printf("원하는 메뉴를 선택 하세요 : ");
			scanf_s("%d", &sub_menu);

			switch (sub_menu) // 메뉴안의 메뉴 !
			{
			case 1:
				printf("정보 확인메뉴에 들어왔습니다.\n");
				break;
			case 2:
				printf("사냥터 이동메뉴에 들어왔습니다.\n");
				break;
			case 3:
				printf("상점 이동 메뉴에 들어왔습니다.\n");
				break;
			case 4:
				printf("메인 화면으로 이동 메뉴에 들어왔습니다.\n");
				break;
			case 5:
				printf("게임 종료하기 메뉴에 들어왔습니다.\n");
				break;
			default:
				printf("잘못된 값을 입력했습니다.\n");
				break;
			}
			break;
		case 3:
			printf("게임을 종료 합니다.\n");
			break;
		default:
			printf("잘못된 값을 입력했습니다.\n");
			break;
		}
	}
	
}

 

소스코드가 효율적으로 변경되진 않지만 이런 식으로 게임의 구조를 계속해서 반복시킬 수 있게 됩니다.

 

728x90
반응형

'컴퓨터 > C' 카테고리의 다른 글

C 언어 - 반복문 do while문  (0) 2021.06.05
C 언어 - 반복문 for  (0) 2021.06.04
C 언어 - 중간 정리  (0) 2021.06.02
C 언어 - 조건문 switch  (0) 2021.06.02
C 언어 - 표준 입력  (0) 2021.06.01

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :