Hallo,
ich will ein Programm schreiben welches durch Eingabe des Monats und Jahr die Anzahl der Tage ermittelt und dabei auch erkennt ob es sich um ein Schaltjahr handelt oder nicht.
Für die Umsetzung verwende ich folgenden Code aus dem Buch "C Programmieren von Anfang an":
#include <stdio.h>
main () {
int jahr, monat, tage
printf("\n\tK a l e n d e r\n ");
printf("\nBitte Jahr eingeben: ");
scanf("%i", &jahr);
printf("\Bitte Monat eingeben: ");
scanf("%i" ,&monat);
if (monat>=1 && monat <=12 && jahr > 1582) {
switch (monat) {
case 2:
if (!((jahr%100)%4) && (jahr%100)
|| !(jahr%400))
tage=29;
else
tage=28
breake;
case 2*2:
case 6:
case 9: case 11:
tage=30
breake;
default:
tage=31;
}
printf("\n%i hat der Monat %i %i Tage" , jahr
,monat,tage);
}
else
printf("\nFalsche Datumsangaben!");
}
Den Ablauf des Programms konnte ich soweit nachvollziehen, jedoch verstehe ich die Berechnung des Schaltjahres nicht if (!((jahr%100)%4) && (jahr%100) || !(jahr%400))
Es handelt sich hier um eine Verschachtelung von UND, ODER und NICHT Operatoren. Wenn ich nun für das Jahr "2012" einsetze dann bekomme ich folgende Aussagen:
falsch UND falsch ODER richtig
Wenn ich nun die Aussagen mit vergleiche komme ich auf "falsch ODER richtig" was somit "richtig" ergibt.
Da die Bedingung WAHR ist, hat der Monat Februar 29 Tage.
Wenn ich nun aber das ganze mit dem Jahr "2011" durchführe bekomme ich wieder eine Wahre Bedingung, jedoch war das Jahr 2011 kein Schaltjahr und somit hätte ich doch eine Falsche Bedingtung haben müssen und somit der Februar nur 28 Tage.
Da ich selbst noch blutiger Anfänger bin und im Buch der Code schlecht erklärt wird weiss ich nicht wo mein Fehler ist.
Vielleicht kann mir jemand von euch auf die Sprünge helfen.
ich bedanke mich schon mal im vorraus
.tomtom