2013-11-24 14 views
5

Tanımlanmış bir veri türü scanf olabilir mi?C - Girdi Girdi Türü Enum

#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); 
} 

Birisi bana hangi veri türünü taramam için yardımcı olabilir? Bunu% u'ya ayarladım çünkü gcc bana imzasız bir tam sayı olduğunu söyledi.

+2

Neden main() no type ile? –

+2

Biçim belirleyiciniz gayet iyi. "Stringy" adresini "scanf" içine iletmeniz gerekir. Yani, scanf ("% u", & stringy) " – simonc

+0

AAAAAH, simonc teşekkürler, sadece ve işareti unuttum. Teşekkürler. – Mathias

cevap

2

Yazdığınız kod çalışmış olmalı, ancak sizin tasarladığınız şekilde değil, aslında enum derlendikten sonra tamsayı olarak tehdit edilmiş ve 'unuzun nesne dosyasında hiçbir iz kalmayacaktır "jan, feb, mar, apr, may programınız sadece scanf ile komut satırından işaretsiz sayı ayrıştırır ve printf sonra aynı numarayı verir bu nedenle, Haziran, Temmuz, Ağustos, Eylül, Kasım okt, Aralık", .. muhtemelen bu

#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; 
} 
istedi

, enumları kullanmaz, ancak mantıken kaynak verimliliğini bozmadan kaynak okunabilirliğini korumak için kullanıldığından ve bu nedenle dizgiler değil tamsayılar olarak tehdit edildiğinden, bu yüzden mantık ayrıştırması yapmak istediğinizde, kullanmak zorunda olduğunuz için mantıklıdır. dizeleri çünkü "jan", "feb" vb. ile kullanıcı girdisini karşılaştırmak zorundasınız.

+0

Eh, aslında programın envanterini test etmesi için yaptım, ama haklıydın, amaçlanan şekilde çalışmadı. – Mathias

+0

Peki, neden ona cevabı vermiyor? – Mawg