Почему функция «EveryMonth» возвращает неожиданный результат? - PullRequest
0 голосов
/ 13 июня 2019

Я определил функцию everymonth.Я хочу использовать возвращаемое значение функции.Тем не менее, оператором int*p=everymonth(i); я не могу использовать массив monthdays, как я намерен.

Сначала я подумал, что область действия массива monthdays неверна, поэтому я определил ее как глобальную переменную.Но это также неверно.

int * everymonth(int year)
{
    int monthdays[12]= {31,59,90,120,151,181,212,243,273,304,334,335}; 
    if(year%400==0 ||(year%4==0 && year%100!=0))
    {
        for(int i=1; i<12; i++)
        {
            monthdays[i]++;
        }
    }

    return q;
}
int main()
{
int sum=0;
int *p=everymonth(i);//i is a Constant 
for(int i=0; i<12; i++)
            {
                sum=sum+p[i];
                printf("%d\n",p[i]);
            }
}

1 Ответ

0 голосов
/ 13 июня 2019

Вы должны написать, что вы намереваетесь делать.

Ваша функция everymonth возвращает q без ее определения.Я предполагаю, что вы хотите вернуть monthdays, потому что иначе нет смысла изменять его перед возвратом.

Если вы вернете monthdays, локальную переменную, это определенно является проблемой.Если вы наберете monthdays, эта проблема будет исправлена ​​для первого вызова функции, но у вас будет проблема после первого високосного года.

Затем в main вы вычисляете сумму суммыдни в конце каждого месяца.Так что в феврале у вас будет 31+ (31 + 28) и т. Д.

...