Schaltjahr
-
Hi. Ich soll mit logischen Operatoren eine Schaltjahrberechnung erstellen. Habe folgendes programmiert:
int jahr; printf("Bitte geben Sie ein Jahr ein: \n"); scanf("%d", jahr); if ((jahr % 4 == 0 && jahr % 100 != 0) || jahr % 400 == 0) { printf("Das Jahr ist ein Schaltjahr \n", jahr); } else { printf("Das Jahr ist KEIN Schaltjahr \n", jahr);
Egal welches Jahr ich eingebe, er sagt immer es ist ein Schaltjahr. Wieso?
-
Es muss lauten
scanf("%d", &jahr); // Du musst die Adresse von 'jahr' uebergeben.
-
Wenn du beim printf noch den Formatspecifier einbaust, bekomst du auch das Jahr noch mit angezeigt.
printf("Das Jahr %d ist ein Schaltjahr \n", jahr);
-
danke, was man nicht alles übersieht
was hat denn das dann für eine auswirkung, wenn ich das "%" vergesse?
kann mir das jemand erläutern?
-
printf wertet den Formatstring aus. Wenn es ein % findet schaut es nach, welcher Typ danach angegeben ist und holt den entsprechenden Wert von der Paramterliste.
Dabei müssen die Typen auch zu den Variablen passen.
Wenn du das % vergisst, erkennt printf keinen Formatspecifier und weiß auch nicht, dass da Werte ausgegeben werden sollen.
Die Ausgabe und Auswertung ist Sache von printf. Der Compiler übergibt nur die Variablen an printf.
Der Compiler erkennt aber auch die Formatstrings und kennt natürlich auch die Variablen die du mit angibst.
Wenn die nicht zusammenpassen gibt das eine Warnung.
Warnungen stoppen nicht die compilierung. Das Programm wird erstellt und du kannst es auch ausführen.
Trotzdem ist da etwas nicht ganz richtig oder missverständlich.Darum solltest du auch auf jede Warnung reagieren als ob es ein Fehler wäre und diese abstellen.
Der Compiler hat schon einen Grund für die Warnung.Wenn du keine Warnung erhälst, musst du diese in den Projekt/Compiler-Einstellungen aktivieren.