1

私はテスト目的のためだけにプログラムを作成しました。キーボードのキー 'p' を押したままにすると、2012 年 1 月 1 日から毎日こぼれ落ち、2013 年まで続くはずで、2013 年 1 月 32 日になっても続きます。これは修正方法がわからないエラーです。この問題を数時間修正しようとしましたが、何もうまく機能していないようです.. (2013 年 2 月 1 日 31 日以降1月)

ここに私のコードがあります:

#include <stdio.h>
#include <stdlib.h>


int month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

int day = 0;
int year = 2012;

char *months[]=
{
    " ",
    " January ",
    " February ",
    " March ",
    " April ",
    " May ",
    " June ",
    " July ",
    " August ",
    " September ",
    " October ",
    " November ",
    " December "
};


int x = 1; //skip the blank element 0, get to January (element 1)

int main()
{

while(1)
{
    char ch;
    ch = getch(); //in_char();

    if(ch == 'p')
    {
        day++;


        if(day == month[x]+1)
        {
            day = 1; //day is equal to the first day of the new month
            month[x]++; //month data increments
            months[x]++; //month display increments
            x++; //element of month array increments to get the data of the next month


            if(year % 4 == 0) //leapyear
            {
                month[2] = 29;
            }
            else
            {
                month[2] = 28;
            }


            if(x == 13) //if 12 months have passed
            {
                year++; //year increments
                day = 1; //initialize day to be day 1 of the next year
                x = 1; //go back to the 'January' element in the array

                if(day == month[x]) //if day is equal to the first month (January) 31 days
                {
                    day = 1;
                    month[x]++; //month data increments
                    months[x]++; //month display increments
                }
            }
        }
        if(year == 9999)
        {
            year = 1;
        }


        printf("%i%s%04i\n",day,months[x],year);
    }
}


return 0;
}

出力:

.
.
.
28 December 2012
29 December 2012
30 December 2012
31 December 2012
1January 2013
2January 2013
3January 2013
4January 2013
5January 2013
6January 2013
7January 2013
8January 2013
9January 2013
10January 2013
11January 2013
12January 2013
13January 2013
14January 2013
15January 2013
16January 2013
17January 2013
18January 2013
19January 2013
20January 2013
21January 2013
22January 2013
23January 2013
24January 2013
25January 2013
26January 2013
27January 2013
28January 2013
29January 2013
30January 2013
31January 2013
**32January 2013**
1February 2013
2February 2013
.
.
.
4

1 に答える 1

2

問題はここにあります:

    if(day == month[x]+1)
    {
        day = 1; // reset date...OKAY
        month[x]++; // NOT OKAY

そうmonth[x]++することで、その月に許可される日数が増えます。代わりに、日と年で行ったのと同じように、月を追跡する変数を保持する必要があります..

于 2012-12-09T16:24:58.690 に答える