2013-11-24 11 views
5

Ist es möglich, einen definierten Datentyp scanf?C - Eingangstyp Enum abrufen

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

Kann mir jemand helfen, nach welchem ​​Datentyp ich suchen soll? Ich habe es auf% u gesetzt, weil gcc mir gesagt hat, dass es eine vorzeichenlose Ganzzahl ist.

+2

Warum main() ohne Typ? –

+2

Ihr Formatbezeichner ist in Ordnung. Sie müssen die Adresse von 'stringy' in' scanf' eingeben. d. h. 'scanf ("% u ", & strähnig)' – simonc

+0

AAAAAH danke simonc, ich habe nur das Ampersand vergessen. Vielen Dank. – Mathias

Antwort

2

Der Code, den Sie geschrieben sollte funktionieren, aber nicht in der Art und Weise Sie in der Tat ENUM soll, werden als ganze Zahl nach der Kompilierung threated und bleibt keine Spur in der Objektdatei Ihrer „Jan, Feb, März, April, Mai , Juni, Juli, August, September, okt, November, Dezember“, aus diesem Grund das Programm nur eine Zahl ohne Vorzeichen von der Kommandozeile mit scanf analysiert und gibt die gleiche Anzahl nach printf .. Sie wollten wahrscheinlich diese

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

, die Enums nicht verwendet, aber es ist sinnvoll, weil Enums verwendet werden, um die Lesbarkeit der Quelle zu erhalten, ohne die Effizienz zu beeinträchtigen und aus diesem Grund als Ganzzahlen nicht Zeichenfolgen, also was Sie tun möchten, ist String-Parsing, müssen Sie verwenden Zeichenketten, weil Sie Benutzereingaben mit "Jan", "Feb" usw. vergleichen müssen.

+0

Nun, eigentlich habe ich dieses Programm gemacht, um Enums zu testen, aber du hattest Recht, es hat nicht so funktioniert wie beabsichtigt. – Mathias

+0

Also, warum nicht ihm die Antwort geben? – Mawg