Funktion addieren
-
das ganze beeinhaltet doch eine Funktion. Das trifft doch zu dem thread zu.
bei mir gibt er keine fehlermeldung an. funktioniert einwandfrei nur das der halt wie eben beschrieben ist ein interner fehler drin ist.lg hasso
-
hasso schrieb:
bei mir gibt er keine fehlermeldung an.
Dann entspricht der gepostete Code nicht dem, den du compilierst!
hasso schrieb:
funktioniert einwandfrei nur das der halt wie eben beschrieben ist ein interner fehler drin ist.
Was heißt interner fehler? Bis auf die Kleinigkeit, dass
schaltjahr
uninitialisiert anpruefung( )
übergeben wird, lässt sich dein Code ohne Fehler ausführen.Wahrscheinlich willst du
/* ... */ if( !pruefung( tag, monat, jahr, schaltjahr ) ) { printf( "\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n", tag, monat, jahr ); }
cheers Swordfish
-
hi sowrdfish
ich wollt das so haben:
if (pruefung == 0) { printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n",tag,monat,jahr); }
meinst du das so, geht nicht ganz... ?
#include <stdio.h> #include <stdlib.h> int pruefung(int summand1, int summand2, int summand3,int summand4); // Dekleration int main() { int tag,monat,jahr,schaltjahr; printf("\nBitte geben Sie das Datum in der Form TT.MM.JJJJ ein!\n"); printf("Eingabe:");scanf("%2u.%2u.%4u", &tag, &monat, &jahr ); pruefung(tag,monat,jahr,schaltjahr); if( !pruefung( tag, monat, jahr, schaltjahr ) ) { printf( "\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n", tag, monat, jahr ); } } int pruefung(int tag, int monat, int jahr,int schaltjahr) { if ( (monat ==01) &&( tag <=31)|| // Solange Bedingungen war wird das Datum ausgegeben! (monat ==02) && (tag <=28) || (monat ==03) && (tag <=31) || (monat ==04) && (tag <=30) || (monat ==05) && (tag <=31) || (monat ==06) && (tag <=30) || (monat ==07) && (tag <=31) || (monat ==8) && (tag <=31) || (monat ==9) && (tag <=30) || (monat ==10) && (tag <=31) || (monat ==11) && (tag <=30) || (monat ==12) && (tag <=31) || ((monat ==02) && (tag ==29)&& (schaltjahr))|| (jahr>1583)) // Beginn des gregorianischen Kalender! { return 1; } else { printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n",tag,monat,jahr); return 0; } }
lg hasso
-
Warum rufst du
pruefung( )
zweimal auf?schaltjahr
ist immer noch uninitialisiert!? "Funktioniert nicht ganz..." ist keine Fehlerbeschreibung.cheers, Swordfish
-
Swordfish schrieb:
Warum rufst du
pruefung( )
zweimal auf?schaltjahr
ist immer noch uninitialisiert!? "Funktioniert nicht ganz..." ist keine Fehlerbeschreibung.cheers, Swordfish
upss meine augen neigen sich für heut fast dem ende... hehe...
Das else der Funktion gibt ja beim return (else) 0 bei einer falschen eingabe .. würde das dann nicht so funktionieren wenn ich beim hauptorogramm :
if (pruefung == 0) { printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n",tag,monat,jahr); }
schreiben würde?
jedoch passiert nichts.
Warum nicht.?
-
fliesskomma-freak schrieb:
hab' grad mal nachgeschaut, im C-standard steht, dass %f zum ausgeben von 'double' da ist. da steht auch nirgends, dass man ein l davor schreiben soll, denn l ist nur bei integer-typen erlaubt. kann aber auch sein, dass ich was übersehen habe.
Du hast nichts übersehen. Die Ellipse (...) bei printf bewirkt, dass alle Argumente nach dem Formatstring der "default argument promotion" unterzogen werden. Das heißt u.a. float wird zu double, char wird zu int. Zwischen %f und %lf muss nur bei scanf unterschieden werden.
-
hasso schrieb:
würde das dann nicht so funktionieren wenn ich beim hauptorogramm :
if( pruefung == 0 ) { printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n",tag,monat,jahr); }
schreiben würde?
Nein. Der Name einer Funktion alleine (ohne Argumentliste zum Aufruf) entspricht der Adresse der Funktion. Die Adresse ist niemals gleich 0. Du musst die Funktion aufrufen.
cheers, Swordfish
-
hi
bitte zeig mal wie das geht .. möcht schlafen gehen ...kein nerven mehr
gruß hasso
-
Deine Augen scheinen diese Uhrzeiten wirklich nicht zu vertragen ^^
Swordfish schrieb:
Wahrscheinlich willst du
/* ... */ if( !pruefung( tag, monat, jahr, schaltjahr ) ) { printf( "\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n", tag, monat, jahr ); }
pruefung( )
gibt bei einem ungültigen Datum (sofern schaltjahr endlich initialisiert ist) 0 zurück. 0 entsprichtfalse
.!false
isttrue
. Du kannst natürlich auch== 0
verwenden.cheers Swordfish
-
Am besten makierst du das Schaltjahr mal so dick wie möglich das ich instalieren soll , weil so geht nichts........
#include <stdio.h> #include <stdlib.h> int pruefung(int summand1, int summand2, int summand3,int summand4); // Dekleration int main() { int tag,monat,jahr,schaltjahr; printf("\nBitte geben Sie das Datum in der Form TT.MM.JJJJ ein!\n"); printf("Eingabe:");scanf("%2u.%2u.%4u", &tag, &monat, &jahr ); if( !pruefung( tag, monat, jahr, schaltjahr ) ) { printf( "\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n", tag, monat, jahr ); } system("pause"); } int pruefung(int tag, int monat, int jahr,int schaltjahr) { schaltjahr =((jahr%400==0) || (jahr%4==0 && jahr % 100 !=0)); // so habs installiert geht komischer weise nicht . if ( (monat ==01) &&( tag <=31)|| // Solange Bedingungen war wird das Datum ausgegeben! (monat ==02) && (tag <=28) || (monat ==03) && (tag <=31) || (monat ==04) && (tag <=30) || (monat ==05) && (tag <=31) || (monat ==06) && (tag <=30) || (monat ==07) && (tag <=31) || (monat ==8) && (tag <=31) || (monat ==9) && (tag <=30) || (monat ==10) && (tag <=31) || (monat ==11) && (tag <=30) || (monat ==12) && (tag <=31) || ((monat ==02) && (tag ==29)&& (schaltjahr))|| (jahr>1583)) // Beginn des gregorianischen Kalender! { return 1; } else { printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n",tag,monat,jahr); return 0; } }
-
Guckst du hier Zeilen 64-77. Das kommt von deinen tausenden Threads zum gleichen Thema...
Wenn du _in_
pruefung( )
ermittelst, objahr
ein Schaltjahr ist, istschaltjahr
als Parameter fürpruefung( )
überflüssig. Weiters passen die Parameternamen bei der deklaration vonpruefung( )
nicht zur Definition.cheers, Swordfish
-
Swordfish schrieb:
Guckst du hier Zeilen 64-77. Das kommt von deinen tausenden Threads zum gleichen Thema...
Wenn du _in_
pruefung( )
ermittelst, objahr
ein Schaltjahr ist, istschaltjahr
als Parameter fürpruefung( )
überflüssig. Weiters passen die Parameternamen bei der deklaration vonpruefung( )
nicht zur Definition.cheers, Swordfish
Wie die passen nicht zusammen..wie passen die denn zusammen ? zeig doch mal bitte lösung dazu .
Komischerweise klappt es ja außer wenn ich :
if( !pruefung( tag, monat, jahr, schaltjahr ) ) { printf( "\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n", tag, monat, jahr );
einfüge.
ohne dem nicht funktionierts einwandfrei nur halt das der Compiler bei einer ricchtigen eingabe ebenfalls fehlermeldung anzeigt.
-
hasso schrieb:
Wie die passen nicht zusammen..wie passen die denn zusammen ?
hasso schrieb:
int pruefung(int summand1, int summand2, int summand3,int summand4); // Dekleration /* ... */ int pruefung(int tag, int monat, int jahr,int schaltjahr)
Noch fragen!?
hasso schrieb:
zeig doch mal bitte lösung dazu.
Schön langsam hab' ich keine Lust mehr...
hasso schrieb:
Komischerweise klappt es ja außer wenn ich
[...]
ohne dem nicht funktionierts einwandfrei nur halt das der Compiler bei einer ricchtigen eingabe ebenfalls fehlermeldung anzeigt.
...weil es dir nicht mal die Mühe wert ist, deutsche Sätze zu schreiben: Was soll "ohne dem nicht funktionierts" bedeuten? Soll ich raten, was nicht Funktioniert? Soll ich in meine Kristallkugel gucken?
cheers, Swordfish
-
Bashar schrieb:
...Die Ellipse (...) bei printf bewirkt, dass alle Argumente nach dem Formatstring der "default argument promotion" unterzogen werden. Das heißt u.a. float wird zu double, char wird zu int. Zwischen %f und %lf muss nur bei scanf unterschieden werden.
ach tatsächlich ... nagut