- ベストアンサー
C++で経過日の計算
- C++を使用して、指定した日付間の日数を計算するプログラムが正しい値を出力しない問題についての質問です。
- プログラムの中のint month_day()関数の処理に問題があり、具体的な箇所が特定できず困っています。
- 質問者は、1月1日から5月1日までの日数を計算するプログラムを作成していますが、正しい値が出力されません。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
int md[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; //月毎の日数 前月までの日数を累計していくので、 int md[12] = {0,31,28,31,30,31,30,31,31,30,31,30}; //12月の分を使うことはない for(i = 1; i <= date.month - 1; i++){ days = days + md[i]; i = i + 1; } forの中のi++かループ中のi=i+1のどちらか片方だけでよい
その他の回答 (8)
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
No.6 です。 「直接の回答では無い」とか書いておいたし、「配列じゃ無いからなんか変なもの」と思って、No.6 は無視したんだろうな。 > でも値を返して、ってエラーが出てくるので > どうにかしなきゃと思った結果がこれでしたorz この部分は、しっかり書いてあるのにね。
お礼
お礼が遅れて申し訳ありません。 ただすぐに確認できる状態でないので、詳しくわかってからお礼をしようと思っていました。 納得してからでないと、生返事みたいな感じになってしまうのでお礼していませんでした。 回答ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
Java も C++ も「配列の添字」については C の仕様を受け継いでるから同じこと....
お礼
…一から勉強し直しますね。^_^; ありがとうございました。
- asuncion
- ベストアンサー率33% (2127/6289)
仮に日数の計算が正しいとしても、month_day関数で >return 0; していることですべてを台無しにしていますね。
お礼
やっぱりそうですよね でも値を返して、ってエラーが出てくるので どうにかしなきゃと思った結果がこれでしたorz 値を返すってのがよくわからないんですよね 回答ありがとうございました。
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
直接の回答ではないのですが、 こういうのもいいかなと思うのです。 ※ただし、未確認。 int month_day(strcut Date date) { int days = 0; for(int i = 1; i < date.month; i++) { switch(i) { case 2: days += 28; break; case 4: case 6: case 9: case 11: days += 30; break; defalut : days += 31; break; } } days += date.day; return days; } int md[12] = {31,28,31,30,31,30,30,31,30,31,30,31}; //月毎の日数 で、間違っているのが一目でわかりますか?(私がわざと間違えて書きました) それより、「西むく士」を知っていたら、こっちの方が確認が楽かなと。
- Wr5
- ベストアンサー率53% (2173/4061)
>正しい値が出ません。 常に「0 Days」と表示される…とか。 >int month_day(struct Date date) >{ > : >return 0; >} なので、month_day()内でどんな処理をしようとも >days = month_day(date); でdaysに入るのは常に0…となっていますが。 配列に関しては既に指摘されてますね。
お礼
まさにその通りで、0daysって出ちゃうんですよ!! 自分でもダメだろこれって思いつつも 値を返すってのがよくわかんなくて^_^; 回答ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
配列を使えてませんね. なぜ i は 1 からなの? C における配列の添え字はいくつからか知ってる? NULL って何>#2.
お礼
C++初めてで、多分javaならわかるんですけど、 検索してみます。 回答ありがとうございました。
- oihsigus
- ベストアンサー率0% (0/1)
配列の個数は12ですが最後にNULLがあるので、md[12]ではなく12にNULLをプラスしたmd[13]です。
- Tacosan
- ベストアンサー率23% (3656/15482)
配列の使い方は OK?
お礼
回答ありがとうございます 配列使えてないですかf^_^; int md~ の行だけじゃだめですか??
お礼
なるほど わかりやすいです(^u^) ありがとうございました。