2016-07-28 9 views
-5

Ich habe versucht, ein Programm auf Gregorian Kalender, aber wenn ich versuchte Monat Namen zu String in wenn Block ebenso wie Groß- und Kleinschreibung, Codeblocks nicht mehr zur Laufzeit reagieren.Zuweisung von String innerhalb von Schalter oder wenn sonst Block

int main() 
{ 
    int month,year; 
    scanf("%d %d",&month,&year); 
    char month1[10]; 
    if(month==1) 
     month1[10]="January"; 
    else if(month==2) 
     month1[10]="February"; 
    else if(month==3) 
     month1[10]="March"; 
    else if(month==4) 
     month1[10]="April"; 
    else if(month==5) 
     month1[10]="May"; 
    else if(month==6) 
     month1[10]="June"; 
    else if(month==7) 
     month1[10]="July"; 
    else if(month==8) 
     month1[10]="August"; 
    else if(month==9) 
     month1[10]="September"; 
    else if(month==10) 
     month1[10]="October"; 
    else if(month==11) 
     month1[10]="November"; 
    else if(month==12) 
     month1[10]="December"; 
    printf("%s %d",month1,year); 
    return 0; 
} 

ähnlich, wenn ich verwendet String-Werte in Schaltergehäuse zuweisen, dann auch Laufzeitfehler aufgetreten

main() 
{ 
    int month,year; 
    scanf("%d %d",&month,&year); 
    char month1[15]; 
    switch(month) 
    { 
    case 1: 
     month1[15]="January"; 
     break; 
    case 2: 
     month1[15]="February"; 
     break; 
    case 3: 
     month1[15]="March"; 
     break; 
    case 4: 
     month1[15]="April"; 
     break; 
    case 5: 
     month1[15]="May"; 
     break; 
    case 6: 
     month1[15]="June"; 
     break; 
    case 7: 
     month1[15]="July"; 
     break; 
    case 8: 
     month1[15]="August"; 
     break; 
    case 9: 
     month1[15]="September"; 
     break; 
    case 10: 
     month1[15]="October"; 
     break; 
    case 11: 
     month1[15]="November"; 
     break; 
    case 12: 
     month1[15]="December"; 
     break; 
    default: 
     printf("wrong input"); 
    } 
    printf("%s %d",month1,year); 
    //char calender[6][7]; 
} 

, warum es passiert?

+0

Zu allererst Sie überfluten Ihr Array; Der maximale Index für das Monatsfeld ist 9 oder 14, abhängig von Ihrer Version Ihres Codes. Außerdem können Sie auf diese Weise keine Zeichenfolgen zuweisen. Sie deklarieren ein Zeichen-Array, nicht ein Array von Zeichen-Arrays. –

Antwort

5

Sie ordnen C-Strings nicht so zu, da Strings als nullterminierte Sequenzen von char-Werten implementiert sind. Wenn alle möglichen Werte Stringliterale sind, können Sie einen char * Zeiger stattdessen verwenden, wie folgt aus:

char *month1; 
if(month==1) 
    month1="January"; 
else if(month==2) 
    month1="February"; 
... 

jedoch ein noch besserer Ansatz ist es, eine Look-up-Tabelle zu erstellen, und Monatsnamen erhalten Array-Index-Operator:

char *months[] = {"January", "February", "March", ...} 
if (month >=1 && month <= 12) { 
    printf("%s %d", months[month-1], year); 
} else { 
    printf("wrong input"); 
} 
2

In C ist strcpy() die richtige Art und Weise Werte zu strings zuzuweisen.

Versuchen: strcpy(month1, "YourMonth")

Verwandte Themen