1月1日から5月1日までの日数を計算するプログラムで、
途中までできたんですけど、正しい値が出ません。
何がダメかもわかりません。
ご教授お願いします。

#include <stdio.h>

struct Date{
int month; //月
int day; //日
};

int month_day(struct Date date)
{
int md[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; //月毎の日数
int i = 0;
int days = 0;

for(i = 1; i <= date.month - 1; i++){
days = days + md[i];
i = i + 1;
}
days = days + date.day;
return 0;
}

int main(int, char **)
{
struct Date date;
int days;

date.month = 5;
date.day = 1;
days = month_day(date);

printf("%d Days\n", days);
return 0;
}


という感じです。
int month_day()の中の処理を書くだけなんですが、
特にエラーも出ないので、何かがおかしいのはわかってるんですが、具体的な所がどこかわからず
困っています。

お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (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のどちらか片方だけでよい
    • good
    • 0
この回答へのお礼

なるほど
わかりやすいです(^u^)
ありがとうございました。

お礼日時:2011/05/05 12:53

No.6 です。


「直接の回答では無い」とか書いておいたし、「配列じゃ無いからなんか変なもの」と思って、No.6 は無視したんだろうな。

> でも値を返して、ってエラーが出てくるので
> どうにかしなきゃと思った結果がこれでしたorz

この部分は、しっかり書いてあるのにね。
    • good
    • 0
この回答へのお礼

お礼が遅れて申し訳ありません。
ただすぐに確認できる状態でないので、詳しくわかってからお礼をしようと思っていました。
納得してからでないと、生返事みたいな感じになってしまうのでお礼していませんでした。
回答ありがとうございました。

お礼日時:2011/05/10 16:43

Java も C++ も「配列の添字」については C の仕様を受け継いでるから同じこと....

    • good
    • 0
この回答へのお礼

…一から勉強し直しますね。^_^;
ありがとうございました。

お礼日時:2011/05/10 16:45

仮に日数の計算が正しいとしても、month_day関数で



>return 0;

していることですべてを台無しにしていますね。
    • good
    • 0
この回答へのお礼

やっぱりそうですよね
でも値を返して、ってエラーが出てくるので
どうにかしなきゃと思った結果がこれでしたorz
値を返すってのがよくわからないんですよね
回答ありがとうございました。

お礼日時:2011/05/05 12:48

直接の回答ではないのですが、



こういうのもいいかなと思うのです。
※ただし、未確認。




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}; //月毎の日数

で、間違っているのが一目でわかりますか?(私がわざと間違えて書きました)

それより、「西むく士」を知っていたら、こっちの方が確認が楽かなと。
    • good
    • 0

>正しい値が出ません。



常に「0 Days」と表示される…とか。

>int month_day(struct Date date)
>{
>     :
>return 0;
>}

なので、month_day()内でどんな処理をしようとも

>days = month_day(date);

でdaysに入るのは常に0…となっていますが。


配列に関しては既に指摘されてますね。
    • good
    • 0
この回答へのお礼

まさにその通りで、0daysって出ちゃうんですよ!!
自分でもダメだろこれって思いつつも
値を返すってのがよくわかんなくて^_^;
回答ありがとうございました。

お礼日時:2011/05/05 12:56

配列を使えてませんね. なぜ i は 1 からなの? C における配列の添え字はいくつからか知ってる?



NULL って何>#2.
    • good
    • 0
この回答へのお礼

C++初めてで、多分javaならわかるんですけど、
検索してみます。
回答ありがとうございました。

お礼日時:2011/05/05 12:57

配列の個数は12ですが最後にNULLがあるので、md[12]ではなく12にNULLをプラスしたmd[13]です。

    • good
    • 0

配列の使い方は OK?

    • good
    • 0
この回答へのお礼

回答ありがとうございます
配列使えてないですかf^_^;

int md~
の行だけじゃだめですか??

お礼日時:2011/04/28 14:36

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


人気Q&Aランキング

おすすめ情報