«неверный суффикс« k »на целочисленной константе» ошибка - PullRequest
0 голосов
/ 26 ноября 2010

Я пишу программу на C для печати даты Пасхи за данный год, используя алгоритм Гаусса. Я действительно новичок в C. Вот код:

#include <math.h>
int main () {
  int year = 1998;
  int a = year % 19;
  int b = year % 4;
  int c = year % 7;
  int k = floor (year/100);
  int p = floor ((13 + 8k)/25);
  int q = floor (k/4);
  int M = (15 − p + k − q) % 30;
  int N = (4 + k − q) % 7;
  int d = (19a + M) % 30;
  int e = (2b + 4c + 6d + N) % 7;
  if (d == 29 && e == 6) {
    printf("19 April");
  }
  else if (d == 28 && e = 6 && (11M + 11) % 30 < 19) {
    printf("18 April");
  }
  else if (22 + d + e < 32) {
    printf("%d March", (22 + d + e));
  }
  else {
    printf("%d April", d + e - 9);
  }
  return 0;
}

и ошибки по кодовой панели:

Line 23: error: invalid suffix "k" on integer constant
In function 'main':
Line 10: error: stray '\342' in program
Line 10: error: stray '\210' in program
Line 10: error: stray '\222' in program
Line 10: error: expected ')' before 'p'
Line 10: error: stray '\342' in program
Line 10: error: stray '\210' in program
Line 10: error: stray '\222' in program
Line 11: error: stray '\342' in program
Line 11: error: stray '\210' in program
Line 11: error: stray '\222' in program
Line 11: error: expected ')' before 'q'
Line 11: error: invalid suffix "a" on integer constant
Line 11: error: invalid suffix "b" on integer constant
Line 16: error: invalid suffix "c" on integer constant
Line 21: error: invalid suffix "d" on integer constant
Line 32: error: invalid suffix "M" on integer constant

Насколько я могу судить, в строке 23 нет "k", так почему компилятор жалуется?

Ответы [ 4 ]

8 голосов
/ 26 ноября 2010

Я думаю, что 8k должно было быть 8*k:

int p = floor ((13 + 8k)/25);
1 голос
/ 26 ноября 2010

Помимо используемых символов Unicode (вы не должны редактировать программу с помощью Winword или любого другого текстового процессора), вам не нужна функция floor, так как вы все время используете только целые числа.Целочисленная переменная не может содержать дробные значения, поэтому при делении year на 100 вы получите только неотъемлемую часть вашего частного.

В строке

 if (d == 28 && e = 6 && (11M + 11) % 30 < 19)

рядом с отсутствующим * у вас есть =, который должен быть ==.

1 голос
/ 26 ноября 2010

Когда вы умножаете целые числа, вам нужно использовать 8 * k, а не 8k.

0 голосов
/ 26 ноября 2010
int p = floor ((13 + 8k)/25);

Что такое 8 КБ? Вы имеете в виду 8 * к?

Аналогичные проблемы в следующих местах также:

 int d = (19a + M) % 30; 

 int e = (2b + 4c + 6d + N) % 7;

 else if (d == 28 && e = 6 && (11M + 11) % 30 < 19) {   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...