2016-10-07 8 views
-1

Я смущен, почему Visual Studios говорит, что после century) перед номером % 7; должна быть точка с запятой. В нем говорится, что я сделал синтаксическую ошибку. Но я хочу взять все это в круглых скобках, а затем сделать по модулю 7.Ошибка синтаксиса функции с модулем

int determineDay(int month, int day, int year) { 
    const int HUNDRED_YEARS = 100; 
    int newYear = year % HUNDRED_YEARS; 
    int century = (year - newYear)/HUNDRED_YEARS; 

    if (month == 1) { 
     const int ONE_YEAR = 1; 
     month = 13; 
     year = year - ONE_YEAR; 
     int zellerNumber = (day + floor((13 * (month + 1))/5)) + year 
      + floor(year/4) + floor(century/4) + 5 * century) % 7; 
     return zellerNumber; 
    } 
    else if (month == 2) { 
     const int ONE_YEAR = 1; 
     month = 14; 
     year = year - ONE_YEAR; 
     int zellerNumber = (day + floor((13 * (month + 1))/5)) + year 
      + floor(year/4) + floor(century/4) + 5 * century) % 7; 
     return zellerNumber; 
    } 
    else { 
     int zellerNumber = (day + floor((13 * (month + 1))/5)) + year 
      + floor(year/4) + floor(century/4) + 5 * century) % 7; 
     return zellerNumber; 
    } 

} 
+2

Вы не видите открывающую скобку ('(') до 'дня'. –

+0

вы делаете код нечитаемым. Не усложняйте вещи, чтобы не потеряться – Raindrop7

+0

хорошая вещь для множественной скобки - это поставить небольшой комментарий рядом с каждым: '(/ * 1 */(/ * 2 * /)/* a * /)/* b * /)/* c * /', поэтому у вас есть 3 (и 2), это так легко контролировать – Raindrop7

ответ

3

Как уже говорилось, вы пропускаете открывающую скобку перед тем day.

Добавление к этому ...

Это незначительная ошибка синтаксиса, но они будут держать происходит, если вы не делаете усилие, чтобы упростить вашу логику. Обратите внимание, что появляется следующее во всех путях ваших if-else-if:

int zellerNumber = (day + floor((13 * (month + 1))/5)) + year 
    + floor(year/4) + floor(century/4) + 5 * century) % 7; 

Так же, как и в математике, вы можете «фактор» это. Поскольку вы знаете, что логика вычисления zellerNumber - это то же самое независимо от случая (только переменные меняются), вы можете переместить его ниже своего if-else-if. Это также позволит вам иметь только один оператор return. Чаще всего, вы должны стремиться к этому.

Упростите свою логику, и вы увидите гораздо меньше синтаксических ошибок, и те, с которыми вы столкнулись, будут легче найти.