ich kriegs nicht gebacken einfache if bedingung klappt nicht :( warum?
-
hi
ich steh irgendwie auf dem schlauch wieso klappt diese einfach if bedingung nicht so wie ich will:
int getdate (datum *p) { static int tageimmonat[]={0,31,29,31,30,31,30,31,31,30,31,30,31}; int tag=0,monat=0,jahr=0; printf("\nTag: "); scanf("%d",&tag); if (tag<1||tag>31) { printf("tag fehler"); return (0); } printf("\nMonat: "); scanf("%d",&monat); if (monat<1||monat>12||tag>tageimmonat[monat]) { return(0); } printf("\nJahr: "); scanf("%d",&jahr); if (jahr<1||(!isleapyear(jahr)&&tag>28&&monat==2)) { printf("fehler jahr"); return (0); } p->tag=tag; p->monat=monat; p->jahr=jahr; return(1); }
so zeihl ist es ein datum einzulesen und gleich zu prüfen ob das ein gültiges datum ist. im großen und ganzen klappt das auch ausser wenn eben kein schaltjahr ist und der tag 29 ist und egal welcher monat springt er in die if bedingung also liefert er true.
aber wieso ich raff es nicht.
also es geht um die if bedingung mit dem jahr.
ich hoffe mir kann jemand helfen und ich hoffe der fehler ist nicht alzu offensichtlich
mfg david
ps: bitte nicht über die printf und scanf aufregen ich bin anfänger
pss: wieso gibt er eigentlich auch nicht den text "fehler jahr" aus? er springt gleich zurück in die main aber wieso?
-
Trantüte schrieb:
so zeihl ist es ein datum einzulesen und gleich zu prüfen ob das ein gültiges datum ist. im großen und ganzen klappt das auch ausser wenn eben kein schaltjahr ist und der tag 29 ist und egal welcher monat springt er in die if bedingung
Trantüte schrieb:
pss: wieso gibt er eigentlich auch nicht den text "fehler jahr" aus?
Wenn "fehler jahr" nicht ausgegeben wird, dann wird auch nicht in den if-Block gesprungen.
Trantüte schrieb:
also liefert er true
Wer oder was liefert denn hier true? Ich sehe kein bool.
Mir scheint, dass dein Ablauf korrekt ist. Hast du schon mal jahr geprüft? Vielleicht ist das ja kleiner 1.
-
Ich glaube, in deinem Fall wäre die Funktion isleapyear interessant. Bei mir arbeitet das Programm tadellos.
Noch ein Tipp: Wenn du sowieso nur 0 und 1 zurückgibst, würde es auch ein bool-Typ tuen, statt einem int (1 Byte gegen 4 Byte).
GrußFH
-
FH schrieb:
Noch ein Tipp: Wenn du sowieso nur 0 und 1 zurückgibst, würde es auch ein bool-Typ tuen, statt einem int (1 Byte gegen 4 Byte).
Der Standard schreibt nicht vor, wie gross bool oder int ist. Dein Beobachtung ist eine reine compilerabhängige Momentaufnahme.
-
((signed, unsigned char)), bool = 1 Byte
wchar_t = 2 Byte
(unsigned) int = 2 oder 4 Byte
short int = 2 Byte
(unsigned) long int = 4 ByteSo soll es laut Standard sein. Das es auf die Maschine ankommt ist klar (16 oder 32 Bit).
Wenn sich die Compiler nicht daran halten dann sind sie nicht Standardkonform.
Zumindest laut meiner aktuellen Tabelle.Was sein soll und was Tatsache ist .....
-
der standard schreibt keine größen fest, er sagt das eher so:
char=1<=bool<=short<=wchar_t<=int<=long
-
Neun schrieb:
Wenn sich die Compiler nicht daran halten dann sind sie nicht Standardkonform.
Zumindest laut meiner aktuellen Tabelle.Am besten, du schmeisst deine Tabelle weg. Der Standard definiert folgendes
char = 1 byte <= short <= int <= longAlles andere ist implementationsspezifisch. Allerdings müssen bool und wchar_t integrale Typen sein. Dh, bool und wchar_t müssen einem der oben aufgeführten Typen entsprechen.
-
hau mich tot
jetzt klappt es
war ein ganz blöder fehler.
das programm bestannd aus 2 quelldateien und beim compilieren (erster versuch) habe ich erst die eine datei zuerst eingeben dann die andere. dann hab ich den fehler in der if bedingung festgestellt und ihn abgeändert (das was ich hier gepostet hab war schon die richtige version).
dann hab ich die sache nochmals compiliert allerdings diesmal die dateien in dem compilierbefehl vertauscht so das er dann nicht die exe datei ersetzt hat sondern eine zweite mit dem namen der anderen datei angefertigt.
leider habe ich beim test dann immer die alte exe datei aufgerufen und demzufolge war der alte fehler immer noch da :). echt dämlich.
ich frag mich so was schon mal jemand anderen passiert ist.
mfg david
und sry das ich euch damit belästigt hab
-
Trantüte schrieb:
ich frag mich so was schon mal jemand anderen passiert ist.
ja.
sogar mehrmals. (immer im abstand von >1 jahr)
-
öfter mal compilieren! (und clearen!)
-
@wächter na dann bin ich ja beruhigt