万年カレンダーの表示時、数字の部分を一マス右にずらすにはどうしたらいいでしょうか
実行するとカレンダーが表示されますが、数字の下一桁を曜日の最後の文字に合わせたいです。現時点では曜日の真ん中の文字に下一桁が出ているので、数字の部分を全体的に一文字右にずらしたいのですがどうすればいいでしょうか。
発生している問題・エラーメッセージ
該当のソースコード
#include <stdio.h> #define WEEK 7 /* 一週間の日にち */ #define LINE 6 /* 表示する最大週 */ static void inputDate(int *pYear, int *pMonth) { printf("万年カレンダー\n"); while (1) { printf("年を入力:"); scanf("%d", pYear); if (1 <= *pYear && *pYear <= 9999) { break; } printf("年は「1~9999」の範囲で入力してください.\n"); } while (1) { printf("月を入力:"); scanf("%d", pMonth); if (1 <= *pMonth && *pMonth <= 12) { break; } printf("月は「1~12」の範囲で入力してください.\n"); } } static int isLeapYear(int year) { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { return 1; /* 閏年 */ } return 0; /* 平年 */ } static int totalYear(int year) { int day = 0; int i; for (i = 1; i < year; i++) { if (isLeapYear(i)) { day += 366; } else { day += 365; } } return day; } static int monthDay(int month) { const int kMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; return kMonth[month - 1]; } static int totalMonth(int year, int month) { int day = 0; int i; for (i = 1; i < month; i++) { day += monthDay(i); } if (isLeapYear(year) && 2 < month) { day++; } return day; } static int startWeek(int year, int month) { int startDay = totalYear(year) + totalMonth(year, month) + 1; return startDay % WEEK; /* 0:Sun, 1:Mon,...6:Sat */ } static void makeCalendar(int *pCalendar, int year, int month) { int i; int start; int last; for (i = 0; i < WEEK * LINE; i++) { pCalendar[i] = 0; } start = startWeek(year, month); last = monthDay(month); if (isLeapYear(year) && month == 2) { last++; } for (i = 0; i < last; i++) { pCalendar[start + i] = i + 1; } } static void printCalendar(const int *pCalendar, int year, int month) { int x, y; int day; printf("%d 年 %d月 のカレンダー\n", year, month); printf("-----------------------------\n"); printf(" Sun Mon Tue Wed Thu Fri Sat\n"); printf("-----------------------------\n"); for (y = 0; y < LINE; y++) { if (pCalendar[y * WEEK] == 0 && pCalendar[y * WEEK + (WEEK - 1)] == 0) { continue; /* 空行なので飛ばす */ } for (x = 0; x < WEEK; x++) { day = pCalendar[y * WEEK + x]; if (day != 0) { printf("%3d ", day); } else { printf(" "); } } printf("\n"); } printf("-----------------------------\n"); } int main(void) { int year, month; int calendar[WEEK * LINE]; /* 7日が6週間分 */ inputDate(&year, &month); makeCalendar(&calendar[0], year, month); printCalendar(&calendar[0], year, month); return 0; }
試したこと
補足情報(FW/ツールのバージョンなど)
。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。