代码之家  ›  专栏  ›  技术社区  ›  Bad Request

“整数常量上的无效后缀”k“错误”

c
  •  0
  • Bad Request  · 技术社区  · 15 年前

    我正在编写一个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 回复  |  直到 15 年前
        1
  •  8
  •   R.. GitHub STOP HELPING ICE    15 年前

    我想这个 8k 可能是为了 8*k :

    int p = floor ((13 + 8k)/25);
    
        2
  •  1
  •   GWW    15 年前

    当你把整数相乘时,你需要用8*k而不是8k。

        3
  •  1
  •   Patrick Schlüter    15 年前

    除了使用的Unicode字符(不应使用Winword或任何其他文本处理器编辑程序),您不需要 floor 函数,因为您一直只使用整数。整数变量不能保存小数,因此当您将 year 到100,你只会得到商的整数部分。

    排队

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

    在失踪者旁边 * 你有一个 = 那应该是 == .

        4
  •  0
  •   Jay    15 年前
    int p = floor ((13 + 8k)/25);
    

    8K是什么?你是说8*K?

    以下地方也存在类似问题:

     int d = (19a + M) % 30; 
    
     int e = (2b + 4c + 6d + N) % 7;
    
     else if (d == 28 && e = 6 && (11M + 11) % 30 < 19) {