• ベストアンサー

カレンダー表示のこと

以前にもさせてもらった質問の続きですが、月日を入力して実行すると、曜日は正確に出るのですが、日が正確に出ないのです。1月は問題ないのですが、例えば、2月5日を入力すると、日に1月分が足されてしまい、2月36日となってしまいます。2月以降も同様です。 for(i=0;i<tuki-1;i++){ hi=hi+dates[i]; と組み立ててるのですが、どうやら、hi=,,,のところがおかしい感じがするのですが、この文はこれでは間違いですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • senjyu
  • ベストアンサー率25% (7/27)
回答No.5

このソース、コンパイルエラー出ませんか? for文の引数変数名が違っていたりします。 それを考慮に入れても、月入力で1を入れると 当然forループは回りません。 でも、1月は問題ないんですよね!? あと、1月1日は、必ず月曜日ということでいいのでしょうか? 多分やりたいことは、1月1日から積算された日が何曜日になるかを やりたいんだと思うのですが、そういう意図であれば、積算変数を 作ったほうが無難です。 このままのやり方だと、入力されたdayが、for文内で積算されて 表示するときにまた戻さなくてはなりません。

その他の回答 (7)

  • senjyu
  • ベストアンサー率25% (7/27)
回答No.8

printf("%d月%d日は、日曜日です。",month,hi); とやっているのでしょうか? それとも printf("%d月%d日は、日曜日です。",month,day); とやっているのでしょうか? 補足で表示されているソースと質問されている変数が違っているので、 多分、解答している皆さんもどちらなのか迷っているのでは。 ちなみに、下のソースはコンパイルエラーがでます。 hi=dayと想定して、 曜日判定をしたら、加算されたhiを元に戻しましょう。 戻し方は、月と各月の日数がわかっているのですから 引き算するだけです。 加算しているのだから、その逆をやればいいのです。 あと、曜日は不変ですから、配列変数に入れると if文はいらなくなりますよ。

noname#1519
質問者

補足

まぎらわしかったですね。すみません。month,dayでやっています。

  • madman
  • ベストアンサー率24% (612/2465)
回答No.7

補足に対する回答 そうです。 あまりなんでも聞かずに、とりあえずやって見ましょう。

noname#1519
質問者

お礼

はい、やってみます。

  • senjyu
  • ベストアンサー率25% (7/27)
回答No.6

下で解答したsenjyuです。 積算ではなく加算です。 失礼しました。

noname#1519
質問者

補足

コンパイルエラーは出ないのですが、日にちがその日の前まですべて加算されて出てしまうのです。結局はエラーてことですね。それと、申し遅れましたが、このカレンダーは2001年度版でやってみていますので、今年の日付を○月○日は何曜日だと表示するように取り組んでいます。

  • madman
  • ベストアンサー率24% (612/2465)
回答No.4

あっ、すみません、良くソースを見ていませんでした。 入力した日数をそのまま、曜日算出用に足しこんでいるんですね。 入力したdayはそのままで、別の変数を用意し、dayの入力後にその変数に代入して入力した日を確保します。 で、printf分でその確保した日を表示します。

noname#1519
質問者

補足

代入ということは、つまり、冒頭のところで例えばaを用意してa=dayという形をとって最後のprintfでday→aにするということでしょうか

  • madman
  • ベストアンサー率24% (612/2465)
回答No.3

補足見ました。前のままのソースですね(^^ printf("%d月%d日は、日曜日です。",month,day); でいいんじゃないんでしょうか? 要求した入力をそのまま出力しましょう。 算出するのは、曜日のみなので、計算結果の月・日を出力する必要はありません。 余分な処理はバグの素です。

noname#1519
質問者

補足

以前に書いた質問をコピーして貼り付けてしまったので、printf("%d月%d日は、日曜日です。",month,day);のmonth,dayを加えて補足に書くことを忘れれしまいました。すると、for文の次のday=day+dates[i]は省いてしまっていいのでしょうか。それとも新たに書くことがあるのでしょうか。

  • madman
  • ベストアンサー率24% (612/2465)
回答No.2

どのような表示を行う予定なのでしょうか? 前回の質問のソースから考えて、入力した月・日に対して、 ○月○日は、日曜日です。 と表示するのでしょうか? それなら、入力した月・日を表示すれば問題ないと思いますが、もし別の出力であれば、どういった表示をしようとしてるのかが、解らないので回答のしようもありません。

noname#1519
質問者

補足

エラーの意味を聞いたときに自分で作ってみたものを書いたのですが、このようにやってみたいのです。 #include <stdio.h> main() { int i,day,month; int dates[]={31,28,31,30,31,30,31,31,30,31,30,31}; printf(" 月を入力してください → "); scanf("%d",&month); printf(" 日を入力してください → "); scanf("%d",&day); for(i=0;i<monthi-1;i++){ day=day+dates[i]; if(day%7=0){ printf("%d月%d日は、日曜日です。"); } else if(day%7=1){ printf("%d月%d日は、月曜日です。"); } else if(day%7=2){ printf("%d月%d日は、火曜日です。"); } else if(day%7=3){ printf("%d月%d日は、水曜日です。"); } else if(day%7=4){ printf("%d月%d日は、木曜日です。"); } else if(day%7=5){ printf("%d月%d日は、金曜日です。"); } else if(day%7=6){ printf("%d月%d日は、土曜日です。"); } }

  • 2Yari
  • ベストアンサー率7% (1/14)
回答No.1

月と日を入力して、月、日、曜日を表示するプログラムですよね? でしたら、hiは入力値のまま表示させないといけません。 これだと、1月1日から入力日付までの日数が、日の所に出てしまいます。

noname#1519
質問者

補足

と、いうことはhi=,,,のところのほかにも、改良する余地があるということでしょうか。文が前後になりましたが、そうです、つき、日、曜日を表示したいのです。

関連するQ&A

専門家に質問してみよう