2013-03-21 45 views
-2

當我編譯此代碼時,它給我爲什麼這個枚舉不起作用?

「[錯誤]未知類型名'天'」。我究竟做錯了什麼?

#include <stdio.h> 

int main(void){ 

int k=0; 
enum days {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday}; 

days dayVariable; 

printf("Enter number of the day: "); 
scanf("%d",&k); 

dayVariable=days(k); 

printf("%s", dayVariable); 

return 0; 

} 
+0

請參閱相關:http://stackoverflow.com/questions/3168306/print-text-instead-of-value-from-c-enum – 2013-03-21 14:20:30

回答

1

在C中,枚舉與正常類型不在同一個名稱空間中。如果你想定義一個類型爲enum的變量,你可以這樣做:

enum days dayVariable; 

或者,你可以爲你的枚舉定義一個標準類型。有很多類似的方法可以做到這一點;這裏是一個:

typedef enum { 
    /* ... */ 
} days; 
3

枚舉不是字符串。實際上可以星期一= 0,週二= 1,等等。如果你想打印字符串,你可以這樣做:

char *days[] = {"Monday", "Tuesday", ... "Sunday"}; 

printf("%s", days[k]); 
+0

這工作!我用k替換了一天。 – Lyrk 2013-03-21 14:53:23

4

如果是C,你必須寫:

enum days dayVariable; 

... 

dayVariable = (enum days)k; 

如果你想days到是類型名稱,typedef它:

typedef enum {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday} days; 

除此之外,您在printf中使用了錯誤的格式說明符。

P.S.

請記住,C和C++是不同的語言。從你的代碼和誤解中可以明顯看出你來自一些C++背景。試着拿起一本關於C編程的書。

1

這不會編譯之一:

dayVariable=days(k); 

days不是一個函數,並用C一般類型名(你似乎期望days是)不功能。您可能意味着:

dayVariable = (enum days) k; 

換句話說,使用簡單的強制轉換爲正確的類型名稱。

+0

(枚舉日)k;似乎很奇怪。我們是否要整數天?你能再解釋一下嗎? – Lyrk 2013-03-21 14:56:01