プロが教えるわが家の防犯対策術!

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);
}

よろしくお願いします。

A 回答 (2件)

>  if (youbi = 0)



youbi と 0 とを比較してないですね。
また、

> youbi = ((COMP + COMP / 4 - COMP / 100 + COMP / 400) + mcnt) % 7;

youbi は 0~6 の範囲の値を取ります。よって、

>  if (youbi > 7) {

7 を超えることは絶対にありません。
    • good
    • 0

>カレンダーを作成するプログラムの問題なのですが



>  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 …
    • good
    • 0
この回答へのお礼

回答有難うございます。
かなり答えに近づきました。

>質問者様のように、その月の朔日が日曜なら、全ての日に [] を付ける、というのもありそうだし・・。

[]を付けるのは日曜です。

>些末
>for( j = 0, ycnt = 0; j < youbi; j++, ycnt++) {
> printf("");
>}
>↓ j は不要です
>for( ycnt = 0; ycnt < youbi; ycnt++ ){
> printf( " .. " );
>}

これは問題文なので変更できません。

お礼日時:2011/02/05 20:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!