2013-11-02 169 views
2

我正在學習C的過程中。我遇到了一個錯誤消息「在|| token之前的預期表達式」。'||'之前的預期表達式令牌

#include <stdio.h> 
char calculate_Easter_date(int y); 

int main() 
{ 
    int year; 
    char sol [80]; 
    while (1) 
    { 
     scanf("%d", &year); 
     if (year == EOF){ 
       break; 
     } 
     sol = calculate_Easter_date(year); 
     printf("%s\n", sol); 
    } 
    return 0; 
} 

char calculate_Easter_date(int y) 
{ 
    char buf[80]; 
    int g = (y % 19) + 1; 
    int c = (y/100) + 1; 
    int x = (3 * c/4) - 12; 
    int z = ((8 * c + 5)/25) - 5; 
    int d = (5 * y/4) - x - 10; 
    int e = (11 * g + 20 + z - x) % 30; 
    if ((e == 25) && (g > 11)) || (e == 24){ 
     e ++; 
    } 
    int n = 44 - e; 
    if (n < 21){ 
     n += 30; 
    } 
    int n = (n + 7) - ((d + n) mod 7); 
    if (n > 31){ 
     sprintf(buf, "%d APRIL %d", y, n - 31); 
     return buf; 
    } 
    else{ 
     sprintf(buf, "%d MARCH %d", y, n); 
     return buf; 
    } 
} 
+0

你在calculate_Easter_date()的第8行有一個太多的圓括號, – Joel

回答

1

您需要:

if (((e == 25) && (g > 11)) || (e == 24)) { 
     e ++; 
    } 

注意額外的括號。

0

在C和C++,if語句是這個形式:當然

if (expression) statement; 

的語句可以是一個塊,通過{}分隔的,但是這不是這裏有什麼問題。

請注意,要檢查的表達式必須括在括號中。

所以這行:

if ((e == 25) && (g > 11)) || (e == 24){ 

是罪魁禍首。

我要強調的是

+-------+ +------+ 
    |  | |  | 
    v  v v  v 
if ((e == 25) && (g > 11)) || (e == 24){ 
^     ^
    |      | 
    +---------------------+ 

較低的亮點展示你在哪裏定界表達括號所處的部位,這意味着你的if語句如下:

if (expression) || (e == 24){ 
       ^
       +-- start of the statement 

爲了解決這個問題,你需要添加括號的另一個層面來包圍額外的比特:

+------------- add these ------------+ 
    |         | 
    | +-------+ +------+    | 
    | |  | |  |    | 
    v v  v v  v    v 
if (((e == 25) && (g > 11)) || (e == 24)){ 
    ^     ^
    |      | 
    +---------------------+ 
相關問題