2

C を学習中です。「Expected expression before || 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;
    }
}
4

2 に答える 2

1

必要なもの:

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

余分な括弧に注意してください。

于 2013-11-02T19:52:56.180 に答える
0

C および C++ では、if ステートメントは次の形式になります。

if (expression) statement;

{もちろん、ステートメントはandで区切られたブロックにすることができますが、}それはここで間違っていることではありません。

チェックする式は括弧で囲む必要があることに注意してください。

したがって、この行:

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)){
    ^                     ^
    |                     |
    +---------------------+
于 2013-11-02T20:01:36.537 に答える