アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (8件)

月と日を入力して、月、日、曜日を表示するプログラムですよね?



でしたら、hiは入力値のまま表示させないといけません。
これだと、1月1日から入力日付までの日数が、日の所に出てしまいます。

この回答への補足

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

補足日時:2001/01/25 18:00
    • good
    • 0

どのような表示を行う予定なのでしょうか?



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

この回答への補足

エラーの意味を聞いたときに自分で作ってみたものを書いたのですが、このようにやってみたいのです。
#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日は、土曜日です。");
}

}

補足日時:2001/01/25 17:53
    • good
    • 0

補足見ました。

前のままのソースですね(^^

printf("%d月%d日は、日曜日です。",month,day);

でいいんじゃないんでしょうか?
要求した入力をそのまま出力しましょう。
算出するのは、曜日のみなので、計算結果の月・日を出力する必要はありません。
余分な処理はバグの素です。

この回答への補足

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

補足日時:2001/01/25 18:20
    • good
    • 0

あっ、すみません、良くソースを見ていませんでした。



入力した日数をそのまま、曜日算出用に足しこんでいるんですね。

入力したdayはそのままで、別の変数を用意し、dayの入力後にその変数に代入して入力した日を確保します。
で、printf分でその確保した日を表示します。

この回答への補足

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

補足日時:2001/01/25 19:41
    • good
    • 0

このソース、コンパイルエラー出ませんか?


for文の引数変数名が違っていたりします。

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

下で解答したsenjyuです。


積算ではなく加算です。
失礼しました。

この回答への補足

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

補足日時:2001/01/25 19:23
    • good
    • 0

補足に対する回答


そうです。
あまりなんでも聞かずに、とりあえずやって見ましょう。
    • good
    • 0
この回答へのお礼

はい、やってみます。

お礼日時:2001/01/25 19:57

printf("%d月%d日は、日曜日です。

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

あと、曜日は不変ですから、配列変数に入れると
if文はいらなくなりますよ。

この回答への補足

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

補足日時:2001/01/26 19:23
    • good
    • 0

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