Rückgabe Funktionswert (Klappt nicht, was mach ich falsch)
-
double hoch(double wert, int potenz) { int i; double ergebnis=1.0; if(potenz == 0) return(1); /* laut Definition */ else if(potenz < 0) return(-1); /* ungültiger Wert */ else { for(i=1; i<=potenz; i++) ergebnis = ergebnis * wert; return(ergebnis); } } main(){ double wert; int potenz; printf("\n Geben sie einen Wert ein!"); scanf("%d",&wert); printf("\n Geben sie eine Potenz ein"); scanf("%i",&potenz); hoch(wert, potenz); printf("\n Ergebnis lautet %d",hoch(wert,potenz)); }
Die Potenz soll berechnet werden, dazu habe ich eine Unterfunktion, leider kommt immer 0 raus, egal was ich eingebe. Bei hoch 1 soll ja 1 rauskommen, bei Potenz <0 soll er soll er -1 zurückgeben und bei einer potenz >1 soll er die potenz mit dem übergeben wert berechnen.
-
Auf die Schnelle fällt mir nur ein Fehler auf - du verwendest die falschen Format-Kennungen für die double-Ein/Ausgabe. Richtig wären "%lf" bei der Eingabe bzw. %f bei der Ausgabe.
(und das alleinstehende 'hoch(wert,potenz);' ist auch nutzlos)
-
Der Compiler spuckt keinen Fehler aus. Ich probiers noch mal
hoch(float wert, int potenz) { int i; float ergebnis=1.0; if(potenz == 0) return(1); /* laut Definition */ else if(potenz < 0) return(-1); /* ungültiger Wert */ else { for(i=1; i<=potenz; i++) ergebnis = ergebnis * wert; return(ergebnis); } } main(){ float wert; int potenz; printf("\n Geben sie einen Wert ein!"); scanf("%f",&wert); printf("\n Geben sie eine Potenz ein"); scanf("%i",&potenz); hoch(wert, potenz); printf("\n Ergebnis lautet %d",(hoch)); }
Jetzt kommt bei 2 hoch 2 aber 4144545 oder so raus anstatt 4
Hab ich nen Logikfehler drin? Bei printf("\n Ergebnis lautet %d",(hoch)); will ich das Ergbnis aus "hoch" anzeigen lassen, ist das syntaktisch so richtig?
-
ragnar79 schrieb:
Der Compiler spuckt keinen Fehler aus.
Ja, nicht jeder Compiler macht sich die Mühe, den Inhalt der Formatstrings mit den übergebenen Parametern zu vergleichen - da mußt du schon selber darauf achten, daß die Angaben stimmen (wenn nicht, kann niemand dafür garantieren, was dein Programm anstellt).
-
Danke für deine Antwort, hatte meinen Beitrag noch mal editiert, da hattest du bereits geantwortet. Hast du vielleicht noche inen Tipp woran es liegen könnte, dass das Program falsch arbeitet?
-
Erstens: Beim scanf()-Aufruf brauchst du "%lf" (einfaches "%f" schreibt in float)
Zweitens: Du gibst die Adresse der Funktion aus, nicht ihren Rückgabewert.
Und drittens: Der freistehende Funktionsaufruf ist immer noch wirkungslos.
printf("\n Geben sie einen Wert ein!"); scanf("%lf",&wert);//richtige Formatkennung printf("\n Geben sie eine Potenz ein"); scanf("%i",&potenz); //hoch(wert, potenz);//sinnlos printf("\n Ergebnis lautet %f",hoch(wert,potenz));//richtige Formatkennung und korrekter Aufruf
-
Du kannst deine hoch-Methode sogar ein wenig "optimieren"
double hoch(float wert, int potenz) { int i = 0; float ergebnis = 1.0; //if (potenz == 0) return 1; /* laut Definition */ if (potenz < 0) return -1; /* ungültiger Wert */ else { for (i = 0; i < potenz; i++) ergebnis *= wert; return ergebnis; } }