
C言語初心者です。
西暦と月を入力してその月のカレンダーを作成するプログラムの問題なのですが
#include<stdio.h>
#define MMAX 12
#define COMP (year - 1)
int main(void)
{
int i, j, year, month, day, youbi, ycnt, mcnt = 0;
int mday[MMAX] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
printf("西暦と月を入力して下さい-->");
scanf("%4d%2d, &year, &month");
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
mday[1] = 29;
for (i = 0; i < [A]; i++) {
mcnt += mday[i];
}
mcnt++;
[B] = ((COMP + COMP / 4 - COMP / 100 + COMP / 400) + mcnt) % 7;
printf("\n%4d 年%2d 月\n", year, month);
printf("----------------------------\n");
printf(" 日 月 火 水 木 金 土\n");
for (j = 0, ycnt = 0; j < youbi; j++, ycnt++) {
printf("");
}
for (day =1; day <= mday[month - 1]; day++) {
if ([C])
printf("[%2d]", day);
else
printf(" %2d ", day);
ycnt++;
if ([D]) {
printf("\n");
ycnt = 0;
}
}
return (0);
}
[A]、[B]、[C]、[D]に答えを入れなきゃいけないのですが私が考えた答えだと
カレンダーの表示すらされません。どこがいけないのでしょうか?
#include<stdio.h>
#define MMAX 12
#define COMP (year - 1)
int main(void)
{
int i, j, year, month, day, youbi, ycnt, mcnt = 0;
int mday[MMAX] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
printf("西暦と月を入力して下さい-->");
scanf("%4d%2d, &year, &month");
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
mday[1] = 29;
for (i = 0; i < month; i++) {
mcnt += mday[i];
}
mcnt++;
youbi = ((COMP + COMP / 4 - COMP / 100 + COMP / 400) + mcnt) % 7;
printf("\n%4d 年%2d 月\n", year, month);
printf("----------------------------\n");
printf(" 日 月 火 水 木 金 土\n");
for (j = 0, ycnt = 0; j < youbi; j++, ycnt++) {
printf("");
}
for (day =1; day <= mday[month - 1]; day++) {
if (youbi = 0)
printf("[%2d]", day);
else
printf(" %2d ", day);
ycnt++;
if (youbi > 7) {
printf("\n");
ycnt = 0;
}
}
return (0);
}
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
>カレンダーを作成するプログラムの問題なのですが
> if ([C])
> printf("[%2d]", day);
> else
> printf(" %2d ", day);
うぅ~、難しい。
質問者様のように、その月の朔日が日曜なら、全ての日に [] を付ける、というのもありそうだし・・。
あと考えられるのは、特定曜日に [] を付ける、くらいかなぁ。
>カレンダーの表示すらされません。どこがいけないのでしょうか?
年月の取得で、
scanf("%4d%2d, &year, &month"); はマズイです。
scanf("%4d%2d", &year, &month); です。
あと、1週間が8日になっています。#1 さんが指摘した
if (youbi > 7) { は、 if( ycnt > 6 ){ です。
些末
for( j = 0, ycnt = 0; j < youbi; j++, ycnt++) {
printf("");
}
↓ j は不要です
for( ycnt = 0; ycnt < youbi; ycnt++ ){
printf( " .. " );
}
(投稿すると、連続する空白は1つになるので、.. 使用)
脱線
それにつけても、年寄りは日曜から始まるカレンダーはどうも苦手です。
週末が週の頭にあるなんて・・。
http://www.nhk.or.jp/bunken/research/kotoba/koto …
回答有難うございます。
かなり答えに近づきました。
>質問者様のように、その月の朔日が日曜なら、全ての日に [] を付ける、というのもありそうだし・・。
[]を付けるのは日曜です。
>些末
>for( j = 0, ycnt = 0; j < youbi; j++, ycnt++) {
> printf("");
>}
>↓ j は不要です
>for( ycnt = 0; ycnt < youbi; ycnt++ ){
> printf( " .. " );
>}
これは問題文なので変更できません。
No.1
- 回答日時:
> if (youbi = 0)
youbi と 0 とを比較してないですね。
また、
> youbi = ((COMP + COMP / 4 - COMP / 100 + COMP / 400) + mcnt) % 7;
youbi は 0~6 の範囲の値を取ります。よって、
> if (youbi > 7) {
7 を超えることは絶対にありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語で2000年以降カレンダーを...
-
strcmp
-
10個出力で改行したいのですが...
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
カレンダーのプログラムについて
-
(C言語)めちゃくちゃな値にな...
-
コンパイルエラーについて
-
台形の面積を求めるプログラム
-
小数点切捨て表示
-
コマンドプロンプトがすぐ消える
-
C言語で、「自然数nを入力し、n...
-
コンパイルすると『breakの位置...
-
入力したお金の金額からお札の...
-
printf で二進表示を行いたい。
-
既約分数の表示プログラム
-
【プログラム】2の倍数で表示非...
-
コマンドラインに出力した文字...
-
C++を使ってのテイラー展開
-
printfの出力内の文字をdefine...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンパイルエラーについて
-
printf で二進表示を行いたい。
-
コマンドラインに出力した文字...
-
(C言語)めちゃくちゃな値にな...
-
c言語でAからZまでを表示する...
-
printfの出力内の文字をdefine...
-
defineで定数が置き換えられな...
-
c言語で2000年以降カレンダーを...
-
cshの文字列操作(0埋め)
-
10個出力で改行したいのですが...
-
4の倍数を論理演算で表す。。
-
ホームページをC言語で作りたい...
-
コマンドプロンプトがすぐ消える
-
教えてください!!
-
Cプログラムについて
-
サイコロをふって、出た目のパ...
-
strcmp
-
じゃんけんゲームの応用
-
C言語でマウス入力(クリックや...
-
printfの有無で値が変化する
おすすめ情報