Wieso funKtioniert mein Schaltjahrprogramm nicht?
-
Das ist mein Schaltjahrprogramm:
#include <conio.h> #include <stdio.h> main() { int jahreszahl; gotoxy(8,3); printf("Geben sie hier die Jahreszahl des moeglichen Schaltjahres an : "); scanf("i",&jahreszahl); if (jahreszahl % 4 == 0 || jahreszahl % 400 == 0 && jahreszahl % 100 != 0) { gotoxy(25,5); printf("Das Jahr ist ein Schaltjahr !"); getch(); } else { gotoxy(25,5); printf("Das Jahr ist kein Schaltjahr !"); getch(); } }
aber es funktioniert nich richtig. Es zeigt an das jedes Jahr ein Schaltjahr ist.
Wer kann mir helfen?
Danke, Anfänger01
-
Ich würd Dir empfehlen da mal ein paar Klammern zu setzen. Da spielt Dir mit Sicherheit die Auswertungsreihenfolge der Operatoren nen Streich. Nur weil Du die durch Leerzeichen klarmachst weiß der Compiler noch nicht, was zusammengehören soll.
MfG Jester
-
Im Moment ist es so:
(((jahreszahl % 4) == 0) || (((jahreszahl % 400) == 0) && ((jahreszahl % 100) != 0)))
Kann jahreszahl % 400 null sein, wenn jahreszahl % 100 nicht null ist? Wohl eher nicht. Das würde aber nicht erklären, wieso jedes Jahr ein Schaltjahr ist.
-
Ich persönlich find das ganze etwas unübersichtlich und würde zu einer kurzen Funktion vom Typ bool raten:
bool Schaltjahrtest(int Jahr) { if((Jahr%400)==0) return true; else if((Jahr%100)==0) return false; else if((Jahr%4)==0) return true; else return false; }
Weiss jetzt net genau, ob die stimmt, erscheint mir aber erstmal logisch. Wenn du sichergehen willst, schau dir mal Volkards Tut. an: das ist zwar für C++, aber IMHO gibt es da auch eine Lektion, die einen Algorithmus zum prüfen auf Schaltjahr behandelt.
Gruß
E-the-Real
-
Das ganze sieht doch sehr nach C aus, also gibt's bei ihm kein bool.
-
Hab zwar schon lange nichts mehr mit printf/scanf gemacht, aber müßte der Aufruf nicht so aussehen:
scanf("%i",&jahreszahl);
-
Ich denke, dass liegt eher an der zeile
scanf("i", &jahreszahl);
Scanf funzt nur, wenn im const char* auch der Operator %i benutzt wird.
scanf("%i", &jahreszahl);
Ohne %i wird das Schaltjahr aus dem Wert berechnet, der schon in 'jahreszahl' steht ( wahrscheinlich 0 => deshalb sind dann auch alle Jahre Schaltjahre, weil du dann nicht auf deine Eingabe überprüfst.
Gruß Flo
-
Helium schrieb:
Das ganze sieht doch sehr nach C aus, also gibt's bei ihm kein bool.
Das is ja wurscht, dann halt so:
int Schaltjahrtest(int Jahr) { if((Jahr%400)==0) return 1; else if((Jahr%100)==0) return 0; else if((Jahr%4)==0) return 1; else return 0; }