C 프로그래밍에서 for 루프를 활용하면 사용자가 입력한 정보를 바탕으로 한 달 달력을 손쉽게 출력할 수 있습니다. 이 글에서는 그 달의 총 일수와 1일이 시작되는 요일(숫자)을 입력받아 달력 형태로 화면에 출력하는 방법을 단계별로 살펴보겠습니다.
달력 출력의 핵심 로직
한 달 달력을 출력하는 핵심 로직은 다음과 같습니다.
for(i=1;i<first;i++)
printf(" ");
for(i=1;i<=noofdays;i++){
printf("%3d",i);
if((first+i-1)%7==0)
printf("\n");
}
로직 상세 설명
첫 번째 for 루프: 변수 first는 그 달의 1일이 무슨 요일에 해당하는지를 나타내는 값입니다. 이 루프는 1일이 시작되기 전까지 공백을 출력하여 날짜가 올바른 요일 위치에서 시작되도록 들여쓰기를 만들어 줍니다.
두 번째 for 루프: 1일부터 그 달의 마지막 날(noofdays)까지 날짜를 순서대로 출력합니다. %3d 서식 지정자를 사용하면 모든 숫자가 세 자리 폭으로 오른쪽 정렬되어 달력처럼 깔끔하게 정렬됩니다.
줄바꿈 조건: (first+i-1)%7==0 조건식은 현재 출력된 날짜가 일주일(7일)의 끝에 도달했는지 확인합니다. 조건이 참이면 줄바꿈 문자(\n)를 출력하여 다음 주의 날짜들이 새로운 줄에서 시작되도록 합니다.
전체 예제 코드
다음 예제는 사용자로부터 그 달의 총 일수와 첫날의 요일 값을 입력받아, 해당 월의 달력을 출력합니다.
#include<stdio.h>
int main(){
int i,noofdays;
int first;
printf("enter no of days in a month:\n");
scanf("%d",&noofdays);
printf("enter first day in a month:\n");
scanf("%d",&first);
for(i=1;i<first;i++)
printf(" ");
for(i=1;i<=noofdays;i++){
printf("%3d",i);
if((first+i-1)%7==0)
printf("\n");
}
return 0;
}
실행 결과
30일짜리 달이 수요일(4번째 위치)부터 시작한다고 가정하고 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.
enter no of days in a month:
30
enter first day in a month:
4
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
정리
이 프로그램은 두 개의 for 루프와 하나의 조건문만으로 달력 출력 기능을 구현합니다. 공백 출력 루프로 시작 위치를 맞추고, 날짜 출력 루프에서 7일마다 줄바꿈을 처리하는 것이 전부입니다. 이 로직을 응용하면 연도 전체 달력 출력, 요일 이름 표시, 윤년 처리 등 더 복잡한 달력 프로그램으로 확장할 수 있습니다.