[gelöst]Brauche dringend Hilfe -if & else if-
-
Nabend
Habe ein Problem mit meinem bisherigen Code:::
#include <stdio.h> #include <windows.h> int Tag; int Jahr; int Monat; char Nochmal = ' '; int main() { printf("Dieses Programm berechnet die Anzahl Tage zwischen zwei Geburtstagen!\n\n\n"); Sleep(1000); printf(":::Geben Sie nun die Daten fuer den ersten Geburtstag ein:::\n\n"); printf("-------------------------GEBURTSDATUM NR.1-------------------------\n\n"); do { printf("Geben Sie das Jahr ein (Bsp: 1994): "); scanf("%d", &Jahr); fflush(stdin); printf("\nGeben Sie den Monat ein (Bsp: Fuer Januar = 1): "); scanf("%d", &Monat); fflush(stdin); printf("\nGeben Sie nun noch den Tag ein: "); scanf("%d", &Tag); fflush(stdin); if (Monat == 1 && Tag <= 31 && Tag >= 1) { printf("-------------------------------------------------"); printf("\nDas erste Geburtsdatum ist der %d Januar %d\n\n", Tag, Jahr); printf("-------------------------------------------------"); } else if (Monat == 1 && Tag > 31 || Tag < 1) { printf("\nUngueltige Angabe!\n"); } /*---------------------------------------------------------------------------------*/ else if (Monat == 2 && Tag <= 29 && Tag >= 1) { printf("-------------------------------------------------"); printf("\nDas erste Geburtsdatum ist der %d Februar %d\n\n", Tag, Jahr); printf("-------------------------------------------------"); } else if (Monat == 2 && Tag > 29 || Tag < 1) { printf("\nUngueltige Angabe!\n"); } /*---------------------------------------------------------------------------------*/ else if (Monat == 3 && Tag <= 31 && Tag >= 1) { printf("-------------------------------------------------"); printf("\nDas erste Geburtsdatum ist der %d Maerz %d\n\n", Tag, Jahr); printf("-------------------------------------------------"); } else if (Monat == 1 && Tag > 31 || Tag < 1) { printf("\nUngueltige Angabe!\n"); } /*---------------------------------------------------------------------------------*/ else if (Monat == 4 && Tag <= 30 || Tag >= 1) { printf("-------------------------------------------------"); printf("\nDas erste Geburtsdatum ist der %d April %d\n\n", Tag, Jahr); printf("-------------------------------------------------"); } else if (Monat == 4 && Tag >30 || Tag < 1) { printf("\nUngueltige Angabe!\n"); } /*---------------------------------------------------------------------------------*/ if (Monat == 5 && Tag <= 31 && Tag >= 1) { printf("-------------------------------------------------"); printf("\nDas erste Geburtsdatum ist der %d Mai %d\n\n", Tag, Jahr); printf("-------------------------------------------------"); } else if (Monat == 5 && Tag > 31 || Tag < 1) { printf("\nUngueltige Angabe!\n"); } /*---------------------------------------------------------------------------------*/ else if (Monat == 6 && Tag <= 30 || Tag >= 1) { printf("-------------------------------------------------"); printf("\nDas erste Geburtsdatum ist der %d Juni %d\n\n", Tag, Jahr); printf("-------------------------------------------------"); } else if (Monat == 6 && Tag >30 || Tag < 1) { printf("\nUngueltige Angabe!\n"); } /*---------------------------------------------------------------------------------*/ else if (Monat == 7 && Tag <= 31 && Tag >= 1) { printf("-------------------------------------------------"); printf("\nDas erste Geburtsdatum ist der %d Juli %d\n\n", Tag, Jahr); printf("-------------------------------------------------"); } else if (Monat == 7 && Tag > 31 || Tag < 1) { printf("\nUngueltige Angabe!\n"); } /*---------------------------------------------------------------------------------*/ else if (Monat == 8 && Tag <= 31 && Tag >= 1) { printf("-------------------------------------------------"); printf("\nDas erste Geburtsdatum ist der %d August %d\n\n", Tag, Jahr); printf("-------------------------------------------------"); } else if (Monat == 8 && Tag > 31 || Tag < 1) { printf("\nUngueltige Angabe!\n"); } /*---------------------------------------------------------------------------------*/ else if (Monat == 9 && Tag <= 30 || Tag >= 1) { printf("-------------------------------------------------"); printf("\nDas erste Geburtsdatum ist der %d September %d\n\n", Tag, Jahr); printf("-------------------------------------------------"); } else if (Monat == 9 && Tag >30 || Tag < 1) { printf("\nUngueltige Angabe!\n"); } /*---------------------------------------------------------------------------------*/ else if (Monat == 10 && Tag <= 31 && Tag >= 1) { printf("-------------------------------------------------"); printf("\nDas erste Geburtsdatum ist der %d Oktober %d\n\n", Tag, Jahr); printf("-------------------------------------------------"); } else if (Monat == 10 && Tag > 31 || Tag < 1) { printf("\nUngueltige Angabe!\n"); } /*---------------------------------------------------------------------------------*/ else if (Monat == 11 && Tag <= 30 || Tag >= 1) { printf("-------------------------------------------------"); printf("\nDas erste Geburtsdatum ist der %d November %d\n\n", Tag, Jahr); printf("-------------------------------------------------"); } else if (Monat == 11 && Tag >30 || Tag < 1) { printf("\nUngueltige Angabe!\n"); } /*---------------------------------------------------------------------------------*/ else if (Monat == 12 && Tag <= 31 && Tag >= 1) { printf("-------------------------------------------------"); printf("\nDas erste Geburtsdatum ist der %d Dezember %d\n\n", Tag, Jahr); printf("-------------------------------------------------"); } else if (Monat == 12 && Tag > 31 || Tag < 1) { printf("\nUngueltige Angabe!\n"); } /*---------------------------------------------------------------------------------*/ printf("\n\nWollen Sie eine neue Berechnung durchführen? <J/N>-: :-\b\b\b"); scanf("%c", &Nochmal); fflush(stdin); } while (Nochmal == 'J' || Nochmal == 'j'); printf("-------------------------------------------------"); printf("\n"); system("PAUSE"); return 0; }
Der Code ist etwas lang, aber eigentlich sehr einfach zu verstehen. Der Benutzer gibt ein Geburtsdatum ein (Jahr/Monat/Tag) und dies wird dann in den else if Anweisungen geschluckt und "sollte" die Angaben ausspucken, welche ich definiert habe- doch das tut es nicht
hab schon vieles probiert.. Kompilierbar ist es. Evt. kann es jemand mal selbst kompilieren und ihr seht selbst was ich meine..
Hoffe ihr könnt mir helfen
MfG eMi
P.S Bin Anfänger
-
Ohne jetzt groß drübergeschaut zu haben: Lass dir deine Eingabe mal ausgeben. Vielleicht dort schon der Fehler.
-
&& zieht stärker als || gemäß Standard, deshalb den || Ausdruck klammern.
-
Oh je oh je, das lässt sich einfacher schreiben:
struct monat { const char *name; int max_days; }; int main(void) { /* warum diese Variable global deklarieren????????? */ int Tag; int Jahr; int Monat; char Nochmal = ' '; struct monat m_db[] = { {"Januar", 31}, {"Februar", 29}, {"März", 31}, // ... den rest kannst du selber schreiben }; ... printf("Geben Sie das Jahr ein (Bsp: 1994): "); scanf("%d", &Jahr); printf("\nGeben Sie den Monat ein (Bsp: Fuer Januar = 1): "); scanf("%d", &Monat); printf("\nGeben Sie nun noch den Tag ein: "); scanf("%d", &Tag); if(Monat < 1 || Monat > 12 || Tag < 1 || Tag > m_db[Monat-1].max_days) printf("\nUngueltige Angabe!\n"); else { printf("-------------------------------------------------"); printf("\nDas erste Geburtsdatum ist der %d %s %d\n\n", Tag, m_db[Monat-1].name, Jahr); printf("-------------------------------------------------"); } ... return 0; }
-
@feigling: Dank dir hab ich den Fehler wohl gefunden!
@WutZ: Das wusst ich gar nicht, war jetzt hier nicht Fehlerrelevant, dennoch vielen Dank für deine Hilfe!
¨@supertux: Hast du das extra für den Thread geschrieben? Wenn ja, dann vielen Dank, natürlich weiss ich, dass es "irgendwie" einfacher geht, doch ich bin nunmal anfänger und mache es im Moment so wie ich's versteh^^
Deinen Code versteh so halbwegs.Vor allem das struct ist iwie seltsam...
Dennoch Vielen Dank!
Wo lag jetzt der Fehler?=
Wenn man meinen Code genau betrachtet sieht man, dass ich jeweils pro Monat immer zwei else if's habe. beim ersten else if hab ich immer && und beim zweiten ||.
Aber bei Zeile 67 hab ich ein || statt &&, und später noch 2x... Nächstes mal muss ich wohl besser kontrollieren, ist aber auch etwas schwer, da soviel Code auf einmal ^^MfG eMi
-
Genau das hat Wutz gemeint -)
else if( Monat == 1 && (Tag > 31 || Tag < 1)) // beachte die zusätzliche Klammerung!!! // und entsprechend für alle anderen Monate...
in deinem ersten Code und es hätte auch funktioniert.
Wenn du in deinem Buch bei Arrays angekommen bist, dann wirst du auch den Code von supertux verstehen...