crowzの日記: いきなりカレンダーの完成した4日目
前回からいきなり飛んだような気がするがノってきたので一気に書き上げてしまった。
汚いけどそのまま掲載。
#include <stdio.h>
#include <time.h>
struct tm *date, *now, makeTime;; /* 日付の構造体 */
void calendarHeader(void); // プロトタイプ
void calendar(int month, int year); // プロトタイプ
void nowDate(void); // プロトタイプ
void getLastDay(int month, int year);
int main(int argc, char* argv[]){
nowDate();
// 指定した日付のカレンダーを出力
// getLastDay(2, 2009);
calendarHeader();
calendar(2, 2009);
}
// 現在を取得
void nowDate() {
time_t nowdate;
int mon, year;
time(&nowdate);
now = localtime(&nowdate);
mon = now->tm_mon + 1;
year = now->tm_year + (1900);
getLastDay(mon, year);
}
// 指定した月の末尾を構造体で取得する
void getLastDay(int month, int year) {
// struct tm makeTime; // 日付のデータを格納する構造体
time_t at2k;
// makeTime.tm_sec = 0;
// makeTime.tm_min = 0;
// makeTime.tm_hour = 0;
// makeTime.tm_wday = 0;
makeTime.tm_mday = 0;
makeTime.tm_mon = 2;
makeTime.tm_year = 109;
at2k = mktime(&makeTime); // パラメタからデータを作成(UNIXTIME)
date = localtime(&at2k); // 生成したUNIXTIMEから時間の構造体を作成してグローバル変数に保存
}
void calendar(int month, int year) {
int i;
for(i = 1; i <= date->tm_mday; i++) {
printf("%2d ", i);
if(i % 7 == 0) {
printf("\n");
}
}
printf("\n\n");
}
// カレンダ見出し
void calendarHeader() {
char str[256];
strftime(str, 255, "%Y年 %m月", date); // グローバル変数の日付が格納された構造体をフォーマットしてstrに代入
printf(" %s \n", str); // それを出力
printf("日 月 火 水 木 金 土\n");
}
とりあえずはまったけど、当日のカレンダーは出るようになった。
本当は*.hファイルに分けたりとかした方がかっこいいのかもしれないが。
ダサい部分は、カレンダ部分の見出し部分の見た目が決め打ちでフォーマットしてある部分と
なんか無駄に関数を分けちゃっている点。ソースが美しくないのは仕方ないかな。
後は、当日の反転・表示月を可変にすること・3か月表示などこっちは
表示に関してはエスケープシーケンスを使ってフォーマットすべきなのかもしれない。
その他はC言語の引数の扱いについて実装しなければならないかな。
いきなりカレンダーの完成した4日目 More ログイン