실행화면

calendar.c
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
#include <stdio.h>
#include <Windows.h>
void draw();
int days(int month, int year);
int main() {
int month[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // 2월이 28일 총 365일
// int yoonMonth[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // 2월이 29일 총 366일
// int calendar[7][7]
int inputYear = 0, inputMonth = 0;
int start; // 시작 위치
int number;
int i;
printf("표시하고 싶은 달력의 연도와 월을 입력하세요.\n");
scanf_s("%d%d", &inputYear, &inputMonth);
start = days(inputMonth, inputYear); // 시작요일의 위치를 구한다.
if ((inputYear % 4) == 0) month[1] = 29; // 윤년이라면 2월은 29일
draw();
number = inputMonth; // for에서 Month를 쓰기위함 inputMonth로하면 애러남
// 요일 공백
for (i = 0; i < start; i++) {
printf(" ");
}
// 1일부터 시작
// 7일마다 칸띄우기를 해주기 위해서 +start를 함.
for (i = 1+start; i <= month[number - 1] +start; i++) {
// 1 ~ month[number-1]까지 출력
if (i > 9+start) {
printf(" %d ", i - start);
}
else {
printf(" %d ", i - start);
}
// 7일마다 칸띄우기
if (i > 0 && ((i % 7) == 0)) {
printf("\n");
}
}
printf("\n\n");
system("pause");
return 0;
}
// 그리는 함수
void draw() {
printf("-----------------------------\n");
printf(" sun mon tue wed thu fri sat \n");
printf("-----------------------------\n");
}
// 1일이 어느 요일인지 계산하는 함수
int days(int month, int year) {
int result;
int y = year;
int m = month;
// 첼러의 공식
if (m == 1 || m == 2){
y -= 1;
m += 12;
}
result = (y + y / 4 - y / 100 + y / 400 + (13 * m + 8) / 5 + 1) % 7;
// result -- 0 = 일요일 1 = 월요일 ... 6 = 토요일
return result;
}
| cs |
댓글
댓글 쓰기