2011-02-24 76 views
0
#define TRIP 6 
#include <stdio.h> 

char error_area(char area_code, char S, char M, char L, char N, char P, char K, char R, char C, char U, char W, char O, char T, char F); 

int main(void) 
{ 
    char area_code, S, M, L, N, P, K, R, C, U, W, O, T, F, checkB, travelarea[TRIP]; 

    printf("Please select from the following that best describes your destination:\n"); /*area code input*/ 
    printf("S Small city - population under 50,000\n");         /*Choices for area code*/ 
    printf("M Medium city - population between 50,000 and 500,000\n"); 
    printf("L Large city - pop. over 500,000\n"); 
    printf("N Natural formation like a mountain, a lake, a cave, a geyser, a fjord, a canyon, etc.\n"); 
    printf("P Designated park or reserve such as a wildlife refuge, a national park, a bioreserve, or a protected marine area\n"); 
    printf("K Man made landmark like the Great Wall of China, the Taj Mahal, or Stonehenge\n"); 
    printf("R State or province or region of a country\n"); 
    printf("C Whole country\n"); 
    printf("U Multiple countries like traveling through Europe\n"); 
    printf("W Ocean voyage\n"); 
    printf("O Any other type of destination - such as visiting the sites of the seven wonders of the world\n"); 
    printf("Please enter the Area Letter code:"); 
    scanf("%c", &area_code); 

    checkB = error_area(area_code, S, M, L, N, P, K, R, C, U, W, O, T, F); 
    while (checkB == F)        /*error loop for error area code*/ 
    { 
     printf("Please re-enter a valid area_code:"); 
     scanf("%c", &area_code); 
     checkB = error_area(area_code, S, M, L, N, P, K, R, C, U, W, O, T, F); 
     if (checkB == T) 
    {travelarea[0]=area_code;} 
    } 

}  

error_area(area_code, S, M, L, N, P, K, R, C, U, W, O, T, F) /*area code error check*/ 
{ 

    if ((area_code == S) || (area_code == M) || (area_code == L) ||(area_code == N) ||(area_code == P) ||(area_code == K) || (area_code == R) ||(area_code == C) || (area_code == U) || (area_code == W) || (area_code == O)) 
    { 
     return T; 
    } 
    else 
    { 
     printf("Area code is invalid. (Please make sure code is capitalize)\n"); 

     return F ; 
    } 
} 

我得到這個錯誤:當我編譯衝突類型的錯誤先前的聲明___在這裏

test2.c:40: error: conflicting types for âerror_areaâ 
test2.c:5: error: previous declaration of âerror_areaâ was here 

我不斷收到這些錯誤信息,我敢肯定,我宣佈在開始原型及其類型所以我不確定爲什麼會出現類型衝突。 我的一位導師告訴我,這是因爲它被聲明並且在底部定義了所有類型,我稱之爲error_area,但似乎不起作用。

回答

1

只是因爲你聲明的原型error_area功能並不意味着你現在可以自由在定義省略返回類型和參數類型。當你定義error_area你仍然應該指定所有類型的明確

char error_area(char area_code, char S, char M, char L, char N, char P, char K, char R, char C, char U, char W, char O, char T, char F) 
{ 
    ... 

相反,你沒有明確的類型名稱定義你的error_area。該定義是根據「舊」的規則解釋,假定即所有失蹤類型爲int,所以你定義了什麼是相當於

int error_area(int area_code, int S, ... /* and so on */ 
{ 
    ... 

這是你在原型說完全不同。所以編譯器告訴你,你的聲明與你的定義相矛盾。

+0

所以這意味着除了int以外的其他類型的函數我還需要在我調用函數時定義類型 – 2011-02-24 17:57:36

+0

@Thao Nguyen:「Call」?這與任何「呼叫」無關。你*聲明*函數(原型)和你*定義*函數(實體)。在這兩種情況下,所有類型都必須明確指定。而且,'int'也必須明確指定。只有過時的C語言版本才允許省略「int」。不再。 – AnT 2011-02-24 18:02:48

+0

@AndreyT:只要人們仍然重視向後兼容性,你會在實踐中看到這些過時的版本。有時候,糟糕的決定,或者至少令人遺憾的決定,會持續很長時間。 – 2011-02-24 18:08:20