Синтаксическая ошибка функции по модулю

#c #function #modulo

#c #функция #modulo

Вопрос:

Я в замешательстве, почему 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;
    }

}
  

Комментарии:

1. Раньше вы пропускали открывающую скобку ( ( ) day .

2. вы делаете код нечитаемым. не усложняйте ситуацию, чтобы не заблудиться

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

Ответ №1:

Как уже говорилось ранее, у вас отсутствует открытая скобка 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 оператор. Чаще всего вы должны стремиться к этому.

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