pow(x,y) beim Volumen [gelöst]
-
Hallo, momentan scheitere ich an der Funktion pow (x,y). Sobald ich für x eine Variable r einsetze bekomme ich die Meldung: undefined reference to `pow'
Zusätzlich habe ich das Problem das ich in der do-while Schleife den radius zweimal eingeben muss und das Volumen auch nicht richtig berechnet wird.
Die Funktion kugel brauche ich.
Leider war die Suchfunktion und google kein Hilfe.
#include <stdio.h> #include <math.h> float r = 1; kugel (r) { float V; V = (4/3) * M_PI * pow (r,3); } int main () { int c; while (r != 0) { do { printf ("Bitte einen Radius r eingeben: "); scanf ("%f\n",&r); while ((c = getchar ()) != EOF && c != '\n'); } while (r >= 10.5 || r < 0); printf ("Volumen beträgt: %f\n",kugel (r)); } }
-
Naja Du musst die Funktion erstmal definieren und dann (meinetwegen mit r
) aufrufen, also so:
#include <stdio.h> #include <math.h> float kugel(float r) { return (4/3) * M_PI * pow (r,3); } int main() { float r = 1; int c; while (r != 0) { do { printf ("Bitte einen Radius r eingeben: "); scanf ("%f\n",&r); while ((c = getchar ()) != EOF && c != '\n'); } while (r >= 10.5 || r < 0); printf ("Volumen beträgt: %f\n", kugel(r)); } return (0); }
-
Hallo
Kein return 0 am Ende von main()!
Die Funktion kugel() gibt keinen Wert zurück!
#include <stdio.h> #include <math.h> #define M_PI 3.14159f float kugel(float r) { return (4/3) * M_PI * (float)pow((double)r, 3.L); } int main() { int c; float r = 1; while (r != 0) { do { printf("Bitte einen Radius r eingeben: "); scanf("%f", &r); while ((c = getchar()) != EOF && c != '\n'); } while (r >= 10.5 || r < 0); printf ("Volumen beträgt: %f\n", kugel(r)); } return 0; }
-
Vielen Dank erstmal für die Hilfe, ich bin ein voll noob.
Ich habe das Programm entsprechend angepasst, leider meldet der Compiler (gcc) immer noch:
cd '/...aufg2/debug' && WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" make -k make all-recursive Making all in src if gcc -DHAVE_CONFIG_H -I. -I/...aufg2/src -I.. -O0 -g3 -MT aufg2.o -MD -MP -MF ".deps/aufg2.Tpo" -c -o aufg2.o /...aufg2/src/aufg2.c; then mv -f ".deps/aufg2.Tpo" ".deps/aufg2.Po"; else rm -f ".deps/aufg2.Tpo"; exit 1; fi /bin/sh ../libtool --tag=CC --mode=link gcc -O0 -g3 -o aufg2 aufg2.o gcc -O0 -g3 -o aufg2 aufg2.o aufg2.o: In function `kugel': [b]/...aufg2/src/aufg2.c:6: undefined reference to `pow'[/b] collect2: ld returned 1 exit status make[2]: *** [aufg2] Fehler 1 make[2]: Das Target »all« wurde wegen Fehlern nicht aktualisiert. make[2]: Für das Ziel »all-am« ist nichts zu tun. make[1]: *** [all-recursive] Fehler 1 make: *** [all] Fehler 2 *** Beendet mit Status: 2 ***
#include <stdio.h> #include <math.h> float kugel (float r) { return (4/3) * M_PI * (float)pow ((double)r,3); } int main () { float r = 1; int c; while (r != 0) { do { printf ("Bitte einen Radius r eingeben: "); scanf ("%f\n",&r); while ((c = getchar ()) != EOF && c != '\n'); } while (r >= 10.5 || r < 0); printf ("Volumen beträgt: %f\n",kugel (r)); } return 0; }
-
Du musst dem gcc -lm mitgeben, damit das verlinkt werden kann.
-
Du musst die entsprechende Library dazu linken. Sprich, beim gcc die Option '-lm' angeben (kleines L).
-
ja das musste ich manuell eintragen, obwohl ich das bei Projekt Erstellung angegeben hatte.
Das andere Problem bleibt. Ich habe mit printlining herausgefunden, dass ich beim ersten Durchlauf einen Wert eingebe und dann sofort einen zweiten eingeben muss (nicht erwünscht). Der erste Wert wird richtig verarbeitet, der dritte Wert den ich eingeben kann wird dann mit dem zweiten Verarbeitet.
Bsp.:
Wert 1.1 eingeben: 1 9999 Wert 1.1: 1 Wert 1.2 eingeben: 2 Wert 1.2: 9999 Wert 1.3 eingeben: 3 Wert 1.3: 2 Wert 2.1 eingeben:
Dieses Problem habe ich auch hier:
#include <stdio.h> int input (int z[3][3]) { int c,x,y; for (x=0;x<=2;x++) for (y=0;y<=2;y++) printf ("Wert %i.%i eingeben: ",x+1 ,y+1) && scanf ("%i\n",&z[x][y]) && printf ("Wert %i.%i: %i\n",x+1,y+1,z[x][y]); } int main () { int matrix [3][3]; input (matrix); }
-
printf ("Wert %i.%i eingeben: ",x+1 ,y+1) && scanf ("%i\n",&z[x][y]) && printf ("Wert %i.%i: %i\n",x+1,y+1,z[x][y]);
Was ist das?! Versuchst du einen neuen Stil zu erfinden? Schreib das mal richtig hin! Diese Konstruktion verhält sich nicht so, wie du es erwartest.
Ansonsten verstehe ich nicht genau was du sagen willst, aber es hängt mit Sicherheit mit gepufferten Eingaben zusammen. Sieh in der C-FAQ nach.
-
printf ("Wert %i.%i eingeben: ",x+1 ,y+1) && scanf ("%i\n",&z[x][y]) && printf ("Wert %i.%i: %i\n",x+1,y+1,z[x][y]);
ist overkill, wie sollte man es besser machen, bin wie gesagt ein noob. Den Fehler habe ich auch gefunden:
scanf ("%i\n",&z[x][y])
das '\n' hat da nichts zu suchen