-1

最後の行の合計を印刷する 1 か月のカレンダーを作成しようとしています。

これの出力はカレンダーに対して正しいですが、合計は 0 であることが出力され続けます。入力が 3=day_of_week および 30=days_in_month の場合、合計は 26+27+28+29+30 = 140 になります。

ありがとう。

int main() {

int day_of_week, days_in_month, i, row=1, array[31], sum=0, a;

printf("Enter the day of the week 1=sun, 2=mon, 3=tue, 4=wed, 5=thurs, 6=fri, 7=sat\n");
scanf("%d", &day_of_week);

printf("Enter the number of days in this month:\n");
scanf("%d", &days_in_month);

for (i=0; i<3*day_of_week; i++)
    printf(" ");

for (i=1; i<=days_in_month; i++) {

    printf("%3d", i);
    array[i] = i;

    day_of_week++;

    if (day_of_week%7==0){
        printf("\n");
    }

}
    printf("\n");
    for (a=days_in_month; a>=(days_in_month-(7-day_of_week)); a--)
        sum+=array[a];

printf("sum of last row is %d\n", sum);


return 0;

}

4

3 に答える 3

1

1つの問題はここにあります:

for (i=1; i<=days_in_month; i++) {

    printf("%3d", i);
    array[i] = i;

    day_of_week++;

    if (day_of_week%7==0){
        printf("\n");
    }

}

あなたはday_of_week範囲外に出ることを許可しています。コードでは、その値が7以下であると想定しています。このループにより、その変数は、ユーザーが入力した値にプラス(days_in_month-1)を加えた値に設定されます。最後forのループでは、ステートメント7 - day_of_weekが否定的である可能性が高く、残りのコードが破棄されます。

7を法とする変数をテストし、改行を出力するときに、オーバーフローをチェックしているようなものです。その際は、設定day_of_week = 0も行ってください。

(days_in_month-(7-day_of_week))また、ユーザーからの入力を取得したらすぐに計算して一時変数に格納します。コード内でこれらの変数を操作しているため、最終的なforループでは、使用していると思われる値が使用されていない可能性があります。または、ユーザー入力に使用する変数を変更したり、一時変数として使用する他の変数を作成したりしないでください。

于 2013-02-19T21:35:35.080 に答える
1

なぜあなたが++day_of_weekをしているのかわかりません、

このようなものがうまくいくはずです:

int main()
{
    int day_of_week, days_in_month, i, row=1, array[31], sum=0, a;

    printf("Enter the day of the week 1=sun, 2=mon, 3=tue, 4=wed, 5=thurs, 6=fri,     7=sat\n");
    scanf("%d", &day_of_week);

    printf("Enter the number of days in this month:\n");
    scanf("%d", &days_in_month);

    for (i = 0; i < 3 * day_of_week; i++)
        printf(" ");
    for (i = 1; i <= days_in_month; i++)
    {
        printf("%3d", i);
        array[i] = i;
        if (i % 7 == 0)
            printf("\n");
    }
    printf("\n");
    for (a=days_in_month; a>=(days_in_month-(7-day_of_week)); a--)
        sum+=array[a];
    printf("sum of last row is %d\n", sum);
    return 0;
}
于 2013-02-19T21:35:37.783 に答える
1

あなたが持っている

for (a=days_in_month; a>=(days_in_month-(7-day_of_week)); a--)

ただしday_of_week、プログラム内で一定のままではなく、次のステートメントの前に変更されます。

day_of_week++;

day_of_week2 番目の変数を使用してインクリメントし、後で変更しないでくださいscanf

于 2013-02-19T21:30:34.563 に答える