2013-11-24 82 views
5

是否可以將scanf定義爲一種數據類型?C - 獲取輸入類型枚舉

#include <stdio.h> 
enum numberByMonth {jan=1,feb,mar,apr,may,jun,jul,aug,sep,okt,nov,dec}; 
main(){ 
printf("\n"); 
printf("Get Number By Month (type first 3 letters): "); 
enum numberByMonth stringy; 
scanf("%u",stringy); 
printf("Your month number is: %u",stringy); 
} 

有人可以幫我,我應該掃描哪種數據類型?我將它設置爲%u,因爲gcc告訴我這是一個無符號整數。

+2

爲什麼main()沒有類型? –

+2

您的格式說明符很好。你需要將'stringy'的地址傳遞給'scanf'。即'scanf(「%u」,&stringy)' – simonc

+0

AAAAAH謝謝simonc,我只是忘了&符。謝謝。 – Mathias

回答

2

您編寫的代碼應該可以正常工作,但不能按照您的預期方式操作,實際上枚舉在編譯之後會被視爲整數,並且在您的目標文件中仍然沒有任何跟蹤「1月,2月,3月,4月,軍,七月,八月,九月,十月,十一月,十二月」,爲此你的程序只是解析一個無符號數的命令行用的scanf和printf後返回相同的號碼。你可能想要這個

#include <stdio.h> 
#include <string.h> 
char* months[] = {"jan","feb","mar","apr","may","jun","jul","aug","sep","okt","nov","dec"}; 

int main() 
{ 
    printf("\n"); 
    printf("Get Number By Month (type first 3 letters): "); 
    char str[3]; 
    scanf("%s",str); 
    int i; 
    for(i=0; i<12; i++) 
    { 
     if(!strcmp(str,months[i])) 
     { 
      printf("Your month number is: %d",i+1); 
     } 
    } 
    return 0; 
} 

它不使用枚舉,但它是合理的,因爲枚舉用於保持源代碼的可讀性而不影響效率,因此,它被視爲整數而不是字符串,所以如果你想要做的是字符串解析,你必須使用因爲你必須將用戶輸入與「jan」,「feb」等進行比較。

+0

嗯,實際上我做了這個程序來測試枚舉,但是你是對的,它沒有按照預期的方式工作。 – Mathias

+0

那麼,爲什麼不給他答案呢? – Mawg