C言語「3次元配列で1年間分のカレンダー作成」
C言語課題で3次元配列で与えられた年の1年間分のカレンダーを作成するという課題で日数の表示の方法が分かりません。回答などいただけると参考になりますので教えていただけるとありがたいです。
現在の状態です(この状態ではエラーは起きていません)
#pragma warning(disable:4996)
#include <stdio.h>
#include <Windows.h>
enum M_LIST { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC, N_MONTH };
enum W_LIST { SUN, MON, TUE, WED, THU, FRI, SAT, N_WEEK };
char *weekday[] = { "SUN","MON","TUE","WED","THU","FRI","SAT"}; //曜日
int mday[] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; //各月の日数
/*プロトタイプ宣言*/
int monthday(int year);
void karenda(int total);
/*メイン*/
void main(void) {
int year;
/*画面制御の初期化*/
COORD coord;
HANDLE hStdout;
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
char cal[N_MONTH][N_WEEK][N_WEEK] = { 0 }; //3次元配列を宣言し0を入れる
printf("西暦を入力");
scanf("%d", &year); //年度の入力
karenda(monthday(year));
}
/*求める月の前月までの総日数*/
int monthday(int year) {
int total = 0;
/*求める年の前年までの総日数を求める*/
total = (((year - 1) * 365) + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + 1)%7;
/*うるう年の判定*/
if ((year % 4) == 0 && (year % 100) != 0 && (year % 400) == 0) {
mday[FEB] = 29;
}
else {
mday[FEB] = 28;
}
return total;
}
/*カレンダー*/
void karenda(int total) {
int month, row, day;
for (month = JAN; month < N_MONTH; month++) {
row = 0;
day = 1;
while (day <= mday[month]) {
for (row = SUN; row < N_WEEK; row++) {
if (day <= SAT) {
day++;
}
}
day++;
}
}
}
よろしくお願いします。
注)karenda(int total)にはprintfを使わず完成させたいです。
お礼
「曜日」という非常に重要な言葉に該当する英語が、非常に長ったらしく、持って回ったような'Day of the week'しかないのは不思議です。 略記する表記もないんですね。 おっしゃるように、表の項目名などで、この下に「曜日」を書いて下さい。・・・と言う時に、例えば、 以下のように、'Day of the week'と表記するしかないのでしょうか? 長いなあ! まあ、妥協案としては、下の例だと、YYYY MM DD DDD Schedule・・・でしょうか? YEAR MONTH DAY DAY OF THE WEEK SCHEDULE 2014 06 27 FRI MEET MR.XXX
補足
その後回答がないので、Yahoo!(USA)で days of the week abbreviations で検索しましたが、 個々の曜日(Sunday, Monday・・・)の短縮形はあっても、「曜日」に当たる表現はday(s) of the weekか、単にday(s)しかなく、短縮形も特にないようですね。 これは、頻度からして、英語の重大な欠陥だと思いますが、吠えてみたところで仕方がないようです。 これ以上探究できないので、これにて締め切ります。 trytobeさん、お待たせしました!(2014.7.7)