Language/C

[ C ] [ 배열 연습 문제 ] 기차표 예매 프로그램

곽수진 2021. 12. 12. 21:19
반응형
기차표 예매 프로그램을 작성하려고 한다. 간단한 구현을 위해 좌석은 모두 10개라고 하자.
예매할 좌석수를 입력받아 빈 자리를 할당하고 예매할 때마다 각 좌석의 상태를 출력한다.
O이면 예매 가능, X는 예매 불가를 의미하며 더 이상 예매할 수 없으면 프로그램을 종료한다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MAX_CNT 10

void Seat(int remain_cnt) 
{
	printf("현재 좌석 : [ ");

	int i;
	for (i = 0; i < MAX_CNT - remain_cnt; i++)
		printf("X ");

	for (; i < MAX_CNT; i++)
		printf("O ");

	printf("]\n");
}


int main(void) 
{

	int cnt, remain_cnt = MAX_CNT;
	int i;

	while (remain_cnt) {
		Seat(remain_cnt);

		printf("\n예매할 좌석 수? ");
		scanf("%d", &cnt);

		if (cnt > 0 && cnt <= remain_cnt) {
			for (int i = 0; i < cnt; i++)
				printf("%d ", i + 1 + MAX_CNT - remain_cnt);
			printf("번 좌석을 예약했습니다.\n");
			remain_cnt -= cnt;
		}
		else {
			printf("남은 좌석수가 %d이므로 %d 좌석을 예약할 수 없습니다.\n", remain_cnt, cnt);
		}
	}

	return 0;
}

 

void Seat(int remain_cnt) : remain_cnt를 매개변수로 갖는 Seat 함수 생성

  → 0번째 자리부터 최대 자리수(10자리)에서 남은 자리를 뺀 값까지 반복문을 수행해서 X로 변경

  → 초기값은 생략하고 최대 자리수(10자리)까지 반복문을 수행해서 O로 변경

 

int cnt, remain_cnt = MAX_CNT : 사용자에게 예매할 좌석 수를 입력받기 전까지는 남은 좌석 수와 카운트 수(예매할 좌석 수)를 MAX(10자리)와 동일하게 설정

 

while(remain_cnt) : 남은 좌석 수가 있을 때까지 계속해서 반복문을 수행

  → 10번 자리까지 모두 예약하면 반복문이 종료됨

 

if (cnt > 0 && cnt <= remain_cnt) : 사용자가 입력한 예매 좌석 수가 0보다 크고 남은 좌석 수보다 작거나 같다면 해당 좌석 예약 완료

 

 

출력 결과 모습

반응형