2013-03-15 143 views
0

爲什麼我一直得到這個錯誤?幫助我這是homeowrk。我對編程幫助很陌生。 $ gcc homework.c homework.c:函數'main': homework.c:32:6:error:'DisplayMenu'的靜態聲明遵循非靜態聲明 homework.c:11:7:note: 'DisplayMenu'先前的聲明在這裏'DisplayMenu'的靜態聲明遵循非靜態聲明

#include <stdio.h> 

void DisplayMenu(); 
void numberPlus10(); 
void numberTimes2(); 
void numberMinus1(); 
void numberTimesnumber(); 

int main (void) 
{ 
    int choice; 
    void DisplayMenu(); 
    scanf("%i", &choice); 

    switch (choice) 
    { 
     case 1: 
      numberPlus10(); 
      break; 
     case 2: 
      numberTimes2(); 
      break; 
     case 3: 
      numberMinus1(); 
      break; 
     case 4: 
      numberTimesnumber(); 
      break; 
     default: 
      break; 
    } 

void DisplayMenu() 
{ 
    printf("1. Number + 10\n"); 
    printf("2. Number * 2\n"); 
    printf("3. Number - 1\n"); 
    printf("4. Number * Number\n"); 
} 

void numberPlus10() 
{ 
    int x; 
    printf("Please enter a number:\n"); 
    scanf("%i", &x); 

    printf("Your number + 10 is %i\n", x + 10); 
} 

void numberTimes2() 
{ 
    int x; 
    printf("Please enter a number:\n"); 
    scanf("%i", &x); 

    printf("Your number * 2 is %i\n", x * 2); 
} 

void numberMinus1() 
{ 
    int x; 
    printf("Please enter a number:\n"); 
    scanf("%i", &x); 

    printf("Your number - 1 is %i\n", x - 1); 
} 

void numberTimesnumber() 
{ 
    int x; 
    printf("Please enter a number:\n"); 
    scanf("%i", &x); 

    printf("Your number squared is %i\n", x * x); 
} 

} 

回答

0

在C中,我們不在任何塊內實現函數。相反,職能應在全球範圍內實施。

刪除最後一個右括號,並在switch的末尾int main(void)之後放置,並且不應再有錯誤。

編輯:

首先..我敢肯定,上面就是爲什麼你的源代碼編譯失敗。

此外,請檢查David的答案,因爲我們都相信你在打算調用它的時候發出了函數聲明 - 雖然這個錯誤沒有觸發編譯時錯誤。

0

彭鈺陳現在是對的!但!你有另一個錯誤。

int choice; 
void DisplayMenu(); // You should not declare a function here. 
scanf("%i", &choice); 

我想你打算調用這個函數 - 所以只需從行首刪除「void」即可。

int choice; 
DisplayMenu(); // Call DisplayMenu 
scanf("%i", &choice); 

而且......請閱讀語言規格

+0

不,這不是問題。 「你不能在另一個裏面聲明一個函數。」的確我們可以。 – starrify 2013-03-15 08:03:36

+0

沒錯。但TS顯然打算調用函數而不是聲明它。 – 2013-03-15 08:06:44

+0

對不起,但我會指出,實際上我沒有檢查語言規範,所以我不知道C標準是如何處理的。但是,在'GCC 4.7.2'中,聲明一個函數在另一個函數內,除了聲明一種語言之外什麼都不做。並且在編譯時它不會產生任何錯誤(但是在聯繫時間內,如果您嘗試調用該函數並且它沒有在任何地方實現)。 – starrify 2013-03-15 08:08:58