Bitte ich brauche hilfe. Das ist meine Programme: #include <stdlib.h> #include<math.h> double main() { double x1,x2,x3; x1=4.52; x2=10.5677; x3=150.578; double Mx1=wurzel( x1); printf("x1:%f\n",Mx1); double Mx2= wurzel( x2); printf("x2:%f\n",Mx2); double Mx3= wurzel( x3); printf("x3:%f\n",Mx3); return 0; } double wurzel(double x) { double m; double f=0.1; double wurz=sqrt(x); for (m=x/2;m*m<x;) { m=m+f; printf("%f=%f\n",m,wurz); } for (m=x/2;m*m>x;) { m=m-f; printf("%f=%f\n",m,wurz); } return m; } Zeigt mir immer fehler: conflicting types for 'wurzel' was ist bedeutet? Wie kann ich wieder gut machen? Eingentlich wollte ich aus funktion "wurzel" in hauptprogramm werte von m in double zurückgeben.
serf5 schrieb: > #include<math.h> Leerzeichen fehlt serf5 schrieb: > double main() int main() serf5 schrieb: > for (m=x/2;m*m<x;) nicht schoen serf5 schrieb: > printf("%f=%f\n",m,wurz); falsche parameter, das muesste glaube ich %lf heissen und nicht %f Dein Problem duerfte aber sein, das du deine Funktion wurzel nicht deklariert hast. Entweder du verschiebst die Funktion vor main oder aber du laesst die Funktion wo sie ist und du deklarierst sie mal aben schnell vor main. http://stackoverflow.com/questions/1549631/getting-conflicting-types-for-function-in-c-why
serf5 schrieb: > Zeigt mir immer fehler: > conflicting types for 'wurzel' Also bei mir sagt der Compiler:
1 | serf5.c:3:8: Warnung: Rückgabetyp von »main« ist nicht »int« [-Wmain] |
2 | serf5.c: In Funktion »main«: |
3 | serf5.c:10:1: Warnung: Implizite Deklaration der Funktion »wurzel« [-Wimplicit-function-declaration] |
4 | serf5.c:11:1: Warnung: Implizite Deklaration der Funktion »printf« [-Wimplicit-function-declaration] |
5 | serf5.c:11:1: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »printf« [standardmäßig aktiviert] |
6 | serf5.c: Auf höchster Ebene: |
7 | serf5.c:20:9: Fehler: In Konflikt stehende Typen für »wurzel« |
8 | serf5.c:10:12: Anmerkung: Vorherige implizite Deklaration von »wurzel« war hier |
9 | serf5.c: In Funktion »wurzel«: |
10 | serf5.c:28:9: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »printf« [standardmäßig aktiviert] |
11 | serf5.c:36:9: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »printf« [standardmäßig aktiviert] |
serf5 schrieb: > Vielen dank für den Rat!! Jetzt funktionirt es! Aber warum? Weil der Compiler nun beim Aufruf auch weiß, daß die Funktion ein double zurückgibt. Wenn man ihm das nicht sagt, nimmt er als default int an. Wenn er dann später zu der Implementation deiner Funktion kommt, steht da aber auf einmal double, was seiner vorherigen Annahme widerspricht. Also gibt's da einen Fehler.
Kaj schrieb: > serf5 schrieb: >> printf("%f=%f\n",m,wurz); > falsche parameter, das muesste glaube ich %lf heissen und nicht %f Das ist falsch! Lies nochmal die Referenz/man page für printf durch. Bei Funktionen mit variablen Argument werden Ganzzahltypen (char, short) in int gewandelt und float als double übergeben. (Macht der Compiler, steht im Standard) Somit kennt printf kein float und daher ist %f für double (und damit auch float) da. Dies glit für printf. scanf ist eine ganz andere Funktion (die erwartet ja auch Zeiger als Paramter) Die Compiler aktzeptieren das %lf und seit C11 ist es auch im Standard enthalt und somit nicht mehr falsch. Aber nötig ist es nicht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.