質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

361閲覧

万年カレンダーの表示時、数字の部分を一マス右にずらすにはどうしたらいいでしょうか

kouzaru13

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/01/17 12:19

万年カレンダーの表示時、数字の部分を一マス右にずらすにはどうしたらいいでしょうか

実行するとカレンダーが表示されますが、数字の下一桁を曜日の最後の文字に合わせたいです。現時点では曜日の真ん中の文字に下一桁が出ているので、数字の部分を全体的に一文字右にずらしたいのですがどうすればいいでしょうか。

発生している問題・エラーメッセージ

該当のソースコード

#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/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

1日あたり4文字表示しているのですから、後ろのスペースを除去し"%4d"にすればよいかと。

diff

1-printf("%3d ", day); 2+printf("%4d", day);

もしくは最大でも2桁なので前にスペースを2つつけて" %2d"にするか。

diff

1-printf("%3d ", day); 2+printf(" %2d", day);

実行結果

万年カレンダー 年を入力:2021 月を入力:1 2021 年 1月 のカレンダー ----------------------------- Sun Mon Tue Wed Thu Fri Sat ----------------------------- 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 -----------------------------

投稿2021/01/17 12:33

編集2021/01/17 12:40
SHOMI

総合スコア4079

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問