unexpected token else ???
-
Hallo Leute,
kann mir jemand sagen wo mein Fehler ist? Bekomme das else in der case anweisung immer rot markiert mit der Fehlermeldung "unexpected token else" lass ich das else weg funktioniert es...
int main(int argc, char** argv) { int tag1, monat1, jahr1, tag2,monat2,jahr2; printf("\nBitte Datum eingeben (tt.mm.jjjj):"); scanf("%i %i %i",&tag1, &monat1,&jahr1); if (monat1>=1 && monat1 <=12 && jahr1 > 1582){ switch (monat1) { case 28: if (!((jahr1%100)%4) && (jahr1%100) || !(jahr1%400)) tag2=tag1+1; monat2=monat1; else tag2=1; monat2=monat1+1; break; } printf("%i.%i.%.i--->%i.%i.%i",tag1,monat1,jahr1,tag2,monat2,jahr2); } else printf("Falsche Datumseingabe!"); return (EXIT_SUCCESS); }
-
Es muss lauten
if (!((jahr1%100)%4) && (jahr1%100) || !(jahr1%400)) { tag2=tag1+1; monat2=monat1; } else { tag2=1; monat2=monat1+1; }
Achte auf die Einrückung deines Codes, das
{
in Zeile 23 ist irritierend, man sieht kaum dass es zumswitch
gehört.
-
Das else in Zeile 15 wird dem if in Zeile 8 zugeordnet. Es kann nicht dem if in Zeile 12 zugeordnet werden, weil zwischen if und else nur eine Anweisung stehen darf (oder eben ein Block). Damit kann der Compiler das zweite else nirgendwo zuordnen.
-
meinst du so??
int main(int argc, char** argv) { int tag1, monat1, jahr1, tag2,monat2,jahr2; printf("\nBitte Datum eingeben (tt.mm.jjjj):"); scanf("%i %i %i",&tag1, &monat1,&jahr1); if (monat1>=1 && monat1 <=12 && jahr1 > 1582) { switch (monat1) { case 28: if (!((jahr1%100)%4) && (jahr1%100) || !(jahr1%400)) { tag2=tag1+1; monat2=monat1; } else { tag2=1; monat2=monat1+1; } break; } printf("%i.%i.%.i--->%i.%i.%i",tag1,monat1,jahr1,tag2,monat2,jahr2); } else printf("Falsche Datumseingabe!"); return (EXIT_SUCCESS); }
-
Kann mir jemand sagen wie ich das eleganter lösen kann mit der ersten if-Anweisung???
Bei meinem Programm soll bei einer Datumseingabe immer der folgende Tag ausgegeben werden...
case 31: if (monat1 == 1 || monat1 == 3 || monat1 == 5 || monat1 == 7 || monat1 == 8 || monat1 == 10) { tag2=1; monat2=monat1+1; jahr2=jahr1; printf("\n%02i.%02i.%04i--->%02i.%02i.%04i",tag1,monat1,jahr1,tag2,monat2,jahr2); } else if (monat1==12) { tag2=1; monat2=1; jahr2=jahr1+1; printf("\n%02i.%02i.%04i--->%02i.%02i.%04i",tag1,monat1,jahr1,tag2,monat2,jahr2); } else { printf("Fehlerhafte Eingabe"); } break;
-
Hallo,
beruht dein letzter Code denn immer noch auf dem vorherigen?
Denn dort istswitch (monat1) { case 28:
wohl schon nicht richtig (die Abfrage müßte ja auf tag1 lauten).
Kennst du denn schon Arrays? Üblicherweise würde man dann für die einzelnen Monate ein Array mit den maximalen Tagen anlegen (Ausnahme natürlich der Februar ;-):
const int maxDays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
Und dann entsprechend mittels
if (tag1 >= 1 && tag1 <= maxDays[monat1-1]) // der Array-Index ist 0-basiert (daher -1)! { // hierdrin dann die weitere Abfrage auf monat == 12 etc. } else { printf("Fehlerhafte Eingabe"); }
-
Th69 schrieb:
Kennst du denn schon Arrays? Üblicherweise würde man dann für die einzelnen Monate ein Array mit den maximalen Tagen anlegen (Ausnahme natürlich der Februar ;-):
const int maxDays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
Oder man lässt es richtig krachen und gönnt sich eine zweite Dimension.
Und wenn man schon so verschwenderisch unterweg ist, macht man das Array noch 1 basiert, um direkt mit den Monatszahlen indexieren zu können.static const int days_in_month[2][13] = { { -1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, { -1, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } };
Je nachdem, ob man es mit einem Schaltjehr zu tun hat, nimmt man dann die erste oder zweite Reihe.
-
gelöscht