簡體   English   中英

C語言中的“預期表達式”錯誤

[英]"Expected expression" error in C language

所以我正在制作這個 C 程序來計算取決於運輸類型的成本。 您在這里看到的代碼是我實際代碼的一小部分,但它與我實際擁有的代碼非常相似(我不得不將術語更改為英語以易於理解)。

另外,我知道如何在 Java 中正確編碼,而且由於 C 看起來很像 Java,我想我的邏輯在這里沒問題。 所以我想我只是在這里遺漏了一些語法錯誤,因為我是 C 語言的新手。

我把“預期的表達”放在哪里是我得到錯誤的地方。

#include <stdio.h>
#include <string.h>
#include <unistd.h>

#define MONTANT_METRO_BUS = 8.00
#define MONTANT_OMNIBUS = 9.00;
#define MONTANT_TRAIN_RAPIDE = 10.00;
#define MONTANT_INTEGRE = 12.00;
#define MONTANT_ORANGE_CARD = 65.00;  

#define CODE_METRO_BUS 'm'
#define CODE_OMNIBUS 'o'
#define CODE_RAPIDE 'r'
#define CODE_INTEGRE 'i'
#define CODE_CARTE_ORANGE 'c'

void lireTransport();

char codeTransport;
double costTransport;

int main {
    lireTransport();
}

void lireTransport() {
    printf("Enter transport code: ");
    scanf("%c",&codeTransport);
    while (codeTransport != CODE_METRO_BUS &&
            codeTransport != CODE_OMNIBUS &&
            codeTransport != CODE_RAPIDE &&
            codeTransport != CODE_INTEGRE &&
            codeTransport != CODE_CARTE_ORANGE){
        printf("Error! Retry: ");
        fflush(stdin);
        scanf("%c",&codeTransport);
    }

    switch (codeTransport) {
        case CODE_METRO_BUS:    costTransport = COST_METRO_BUS;  //Expected expression
                                break;
        case CODE_OMNIBUS:      costTransport = COST_OMNIBUS;  //Expected expression
                                break;
        case CODE_RAPIDE:       costTransport = COST_TRAIN_RAPIDE; //Expected expression
                                break;
        case CODE_INTEGRE:      costTransport = COST_INTEGRE; //Expected expression
                                break;
        case CODE_CARTE_ORANGE: costTransport = MONTANT_ORANGE_CARD; //Expected expression
                                break;
    }
}

但是當我用直接值替換常量時,沒有發生錯誤

switch (codeTransport) {
            case CODE_METRO_BUS:    costTransport = 1.25;
                                    break;
            case CODE_OMNIBUS:      costTransport = 2.50;
                                    break;
            case CODE_RAPIDE:       costTransport = 3.75;
                                    break;
        case CODE_INTEGRE:          costTransport = 4.2;
                                    break;
        case CODE_CARTE_ORANGE:     costTransport = 5.25
                                    break;
    }
}

改變

#define MONTANT_TRAIN_RAPIDE = 10.00;

#define MONTANT_TRAIN_RAPIDE 10.00

等等。


#define是預處理器的一部分,它是一種在 C 語言之前運行的原始預編譯器。 預編譯器對文本(實際上是令牌)進行操作並進行簡單的替換。

當你做

#define MONTANT_TRAIN_RAPIDE 10.00

未來提及的 MONTANT_TRAIN_RAPIDE 將被10.00取代。

#define MONTANT_TRAIN_RAPIDE = 10.00; , 替換為= 10.00; ,這將產生語法上無效的 C 源代碼(您將擁有=標記,編譯器會在其中期望表達式:因此會出現“預期表達式”錯誤)。

如果您使用-E運行符合 POSIX 的編譯器,您將可以看到預處理結果的文本形式。

IE:

gcc -E your_source.c

將向您顯示宏擴展的結果,讓您真正看到錯誤:

costTransport = = 10.00;;

你在哪里

costTransport = COST_TRAIN_RAPIDE;

等等。

使用#define創建的宏會直接替換源代碼。 它不是分配給的變量。 所以考慮到這一點:

#define MONTANT_OMNIBUS = 9.00;

然后這個:

case CODE_OMNIBUS:      costTransport = COST_OMNIBUS;  //Expected expression

變成:

case = 9.00;:      costTransport = = 9.00;;  //Expected expression

去掉=; 所以符號只替換為值:

#define MONTANT_OMNIBUS 9.00

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM