C로 달력 출력 프로그램을 짰는데요..;;
큰아
//20800613 정신원
//a년과 b월을 입력받아 그 달 달력을 출력하는 프로그램.
#include stdio.h
#define YES 1
#define NO 0
int month_day(int y,int m);
int first_day(int y,int m);
int show_calendar(int d, int f);
int is_leafyear(int y);
int year_days(int y);
int main(void)
{
int a,b,x;
int day,first;
while(1){
while(1){
printf(\n ▷ What Year?? );
scanf(%d, &a);
if((1900=a) && (a=2100))
break;
else
printf( → 1900~2100 사이를 입력해주세요.\n); //1900~2100년을 입력받기 위한 반복문.
}
while(1){
printf( ▷ What Month?? );
scanf(%d, &b);
if((0b) && (b13))
break;
else
printf( → 1~12 사이를 입력해주세요.\n); //1~12월을 입력받기 위한 반복문.
}
day=month_day(a,b);//해당 월의 날짜수를 알아내는 함수 call
first=first_day(a,b);//해당 월의 첫재날 요일을 알아내는 함수 call
show_calendar(day,first);//해당 월의 날짜수와그 첫째날 요일을 입력받아 달력 출력하는 함수 call
while(1){
printf(\n\n 다시 검색 하시겠습니까? \n (1=Yes/0=No) );
scanf(%d, &x);
if(x==1)
break;
else if(x==0)
return 0;
else
printf( - 1이나 0을 입력하세요. 1은 다른 달력 검색. 0은 종료.\n); //다른 달력을 검색할 것인지 여부 확인.
}
}
system(pause);pause);
}
int month_day(int y,int m)
{
switch(m){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
if(is_leafyear(y)==YES) //2월이 윤년인지 아닌지 판단.
return 29;
else
return 28;
}
}//해당 월의 날짜수를 계산하는 함수.
int is_leafyear(int y)
{
if(((y%4==0) && (y%100!=0)) || (y%400==0)) //해당년도가 4로 나누어떨어지면 윤년. 100으로 나누어떨어지면 윤년 아님. 그중 400으로 나누어떨어지면 윤년.
return YES;
else
return NO;
}
int first_day(int y, int m)
{
int i,n=0;
int fd;
for(i=1900;iy;i++)
n=n+year_days(i);
for(i=1;im;i++)
n=n+month_day(y,i);
fd=n%7+1;
return fd; //첫번째 요일을 구하고 그 값을 메인의 first로 반환.
}
int year_days(int y)
{
if(is_leafyear(y)==YES)
return 366;
else
return 365; // 윤년이냐 아니냐에 따라 366일인지 365일인지 반환.
}
int show_calendar(int d, int f)
{
int i,count=0;
printf( 〓 일 〓 월 〓 화 〓 수 〓 목 〓 금 〓 토 〓 \n\n);
for(i=1;i=f;i++){
printf( );
count++;
}
for(i=1;i=d;i++){
printf(%6d, i);
count++;
if(count%7==0){
printf(\n\n);
count=0;
}
}
}//main 에서 day와 first를 입력 받아 달력 출력.
***
이렇게 길게 올려서 죄송한데ㅡ.ㅜ
열심히 만들어 놓고 하루를 궁리해봤는데 고쳐보고 답이 안나와서요..;;
이렇게 프로그램 짰더니 달력이 잘 표시가 되는데요..
문제가 `-` 그 달의 첫 요일이 빈칸없이 바로 시작하면 달력이 깨져서 나와요..;; (ex 2008년 6월)
첫번째 날짜구해서 빈칸 띄우는데 문제가 있는것 같기도하고 여기저기 손대보고 해도..;;
잘 안되네요 ㅠㅠ 어떻게 해야 될까요.;;
-
연다홍
show_calendar 함수 안에서 f 가 7이 아닐때만 빈 칸을 집어넣으면 되더군요..ㅎ