misc Geschrieben 10. Februar 2012 Geschrieben 10. Februar 2012 #include <stdio.h> int fak(int n, int erg){ if(n>1){ erg*=n; fak(n-1, erg); } else{ return erg; } } int main(){ int eing; printf("Bitte Zahl eingeben: \n"); scanf("%i",&eing); printf("Ergebnis:%3i\n", fak(eing, 1)); return 0; } Wiso kommt hier immer 12 raus? Und gibs ne Möglichkeit einen Standardwert für die Übergabeparameter festzulegen? also ich meine wie in java: public int fak(int n, int[B] [U]erg=1[/U][/B]){...} Zitieren
Klotzkopp Geschrieben 10. Februar 2012 Geschrieben 10. Februar 2012 Dein Compiler sollte diesen Code eigentlich nicht akzeptieren, oder zumindest eine Warnung ausgeben, denn im if-Zweig gibt deine Funktion nichts zurück. Nur im else-Zweig ist eine return-Anweisung. Und gibs ne Möglichkeit einen Standardwert für die Übergabeparameter festzulegen?Ja. Zitieren
Hexagon Geschrieben 10. Februar 2012 Geschrieben 10. Februar 2012 Moin. Wiso kommt hier immer 12 raus? Immer? Oder nur bei bestimmten Eingaben? Und gibs ne Möglichkeit einen Standardwert für die Übergabeparameter festzulegen? also ich meine wie in java: public int fak(int n, int[B] [U]erg=1[/U][/B]){...} Genau so macht man das auch C/C++. Zitieren
misc Geschrieben 10. Februar 2012 Autor Geschrieben 10. Februar 2012 Also bei eingabe 1 kommt 1 raus. bei allen anderen getesteten eingaben ist das ergebnis 12. wenn ich die zeile int fak(int n, int erg){ durch int fak(int n, int erg=1){ ersetze bekomme ich bei der compilierung die fehlermeldung: fak.c:23: error: expected ';', ',' or ')' before '=' token Zitieren
Guybrush Threepwood Geschrieben 10. Februar 2012 Geschrieben 10. Februar 2012 Was für einen Compiler benutzt du denn? Zitieren
Klotzkopp Geschrieben 10. Februar 2012 Geschrieben 10. Februar 2012 Ich muss mich korrigieren: Defaultparameter gibt's nur in C++, nicht in C. Zitieren
misc Geschrieben 10. Februar 2012 Autor Geschrieben 10. Februar 2012 Benutze minGW für Windows. Also das erste Problem hab ich mitlerweile mit Hilfe eines kumpelz gelöst. Habe die fak.c-Datei in ein anderes Verzeichnis kopiert und dann nochmal neu compiliert. Der Grund war: naja, der gcc nimmt erstmal den code und baut eine .o datei daraus, das is nur der übersetzte programmcode in nem internen format dann nimmt der linker vom gcc die .o datei und bindet die benötigten bibliotheken ein für, für printf, scanf aufruf z.b. und baut eine ausführbare datei daraus wenn die .o da noch gelegen hat von einem früheren test, bei dem halt immer 12 raus kam dann hat der linker die gesehen und direkt die exe draus gebaut ohne den code neu zu übersetzen Weiss nich so ganz genau was es heisst aber das programm funktioniert einwandfrei jez. wenn ihr mir jez noch meine zweite frage beantworten könntet bitte?! Zitieren
Klotzkopp Geschrieben 10. Februar 2012 Geschrieben 10. Februar 2012 das programm funktioniert einwandfrei jez.Wenn im if-Zweig deiner fak-Funktion immer noch keine return-Anweisung steht, dann ist das aber eher Zufall. Zitieren
misc Geschrieben 10. Februar 2012 Autor Geschrieben 10. Februar 2012 Ich muss mich korrigieren: Defaultparameter gibt's nur in C++, nicht in C. ok damit wäre auch das geklärt danke leute. Zitieren
Servior Geschrieben 10. Februar 2012 Geschrieben 10. Februar 2012 Wenn im if-Zweig deiner fak-Funktion immer noch keine return-Anweisung steht, dann ist das aber eher Zufall. Bei seiner Umsetzung wäre das return im IF-Zweig völlig egal, er kommt nie dort an. Entsprechend würde es in beiden Fällen zu einer Compiler-Warnung kommen. A: Das return fehlt. B: Das return wird nie erreicht. Um innerhalb des IF-Zweigs ein Return zu verwenden müsste er das Programm etwas anders gestalten. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.