Fehlerhafter Code. Was tun??
-
Hi,
ich programmiere erst seit kurzem und weiss nicht genau ob ich hier richtig bin. Ich habe auf jeden fall folgendes problem: Mein Programm ist fehlerhaft und ich weiß nicht woran es liegt. mit diesem Programm will ich Polarkoordinaten in kartesische koordinaten umwandeln und umgekehrt. Das Ergebnis ist jedoch immer falsch und das programm wird immer fehlerhaft beendet. Ich bedanke mich schonmal im Voraus.
Hier der Code (in C geschrieben):
#include <stdio.h> #include <math.h> int main() { int ch1, successfulscanfinish; float r, az, x, y, r2, az2, r2x, r2y, x2, y2; printf ("Was wollen sie umrechnen?\n\nKartesische Koordinaten in Polarkoordinaten (1)\n\nPolarkoordinaten in kartesische Koordinaten (2)\n"); scanf ("%d", &ch1); switch(ch1) { case 1: printf ("x="); scanf ("%f", &x); printf ("y="); scanf ("%f", &y); r2x=pow(x,2); r2y=pow(y,2); r2=r2x+r2y; az2=atan(y/x); printf ("r=%f\nAzimut=%f", &r2, &az2); break; case 2: printf ("Azimut="); scanf ("%f", &az); printf ("r="); scanf ("%f", &r); x2=r*cos(az); y2=r*sin(az); printf ("x=%f\ny=%f", &x2, &y2); break; default: printf ("falsche Eingabe"); break; } scanf ("%s", successfulscanfinish); return 0; }
-
Diese Zeile
scanf ("%s", successfulscanfinish);
macht wenig Sinn. Du willst hier einen String vom Benutzer einlesen (mit "%s"), successfulscanfinish ist aber vom Typ int. Außerdem meckert der Debugger, weil successfulscanfinish nicht initialisiert, aber verwendet wurde (würdest du einen int-Wert einlesen, müsstest du die Adresse der Variablen übergeben, nicht die Variable selbst => "%successfulscanfinish"). Was willst du mit der Zeile bezwecken? Dass sich die Konsole nicht schließt? Das ist kein vernünftiger Weg. Besser wäre z.B. sowas:
void wait () { FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)); _getch(); } //einfach am Ende der main-Funktion wait() aufrufen
-
Danke für die schnelle Antwort.
Ja, ich wollte mit successfulscanfinish bezwecken, dass das programm nicht sofort beendet. Wenn ich aber deinen vorgeschlagenen code eingebe, bekomme ich folgende Meldung: "error: a function-definition is not allowed here before '{' token".
Ausserdem ist damit nur der Fehler beim Beenden behoben. Das Programm rechnet mir immer noch falsche Ergebnisse aus.
-
marktrash schrieb:
Danke für die schnelle Antwort.
Ja, ich wollte mit successfulscanfinish bezwecken, dass das programm nicht sofort beendet. Wenn ich aber deinen vorgeschlagenen code eingebe, bekomme ich folgende Meldung: "error: a function-definition is not allowed here before '{' token".
Ausserdem ist damit nur der Fehler beim Beenden behoben. Das Programm rechnet mir immer noch falsche Ergebnisse aus.Du musst die Funktionsdefinition (also das, was ich gepostet habe) oben zwischen die includes und die main-Funktion packen (nicht in die Funktion!), und am Ende der main (vor das return) notierst du "wait();". Dann sollte es klappen. Die Rechnerei schaue ich mir jetzt nicht mehr an, ich leg mich schlafen. Es hilft dir sicher, wenn du schrittweise mit dem Debugger durch das Programm steppst (Breakpoint auf eine Zeile mit F9 setzen und dann mit F10/F11 Zeile für Zeile einzeln ausführen, Variableninhalte z.B. per Tooltip überprüfen).
-
Wenn ich das tue bekomme ich wieder nen haufen an Fehlermeldungen:
1. "error:
STD\_INPUT\_HANDLE' was not declared in this scope" 2\. "error:
GetStdHandle' was not declared in this scope"
3. "error:FlushConsoleInputBuffer' was not declared in this scope" 4\. "error:
_getch' was not declared in this scope"??? Ich versteh garnix mehr.
-
windows.h inkludieren. Gute Nacht!
-
_matze schrieb:
windows.h inkludieren. Gute Nacht!
Damit fallen die Fehlermeldungen 1-3 weg.
"error: `_getch' was not declared in this scope" kommt aber wieder.
-
marktrash schrieb:
_matze schrieb:
windows.h inkludieren. Gute Nacht!
Damit fallen die Fehlermeldungen 1-3 weg.
"error: `_getch' was not declared in this scope" kommt aber wieder.Probier mal stattdessen "getch" ohne Unterstrich.
-
_matze schrieb:
Probier mal stattdessen "getch" ohne Unterstrich.
dann kommt die gleiche Fehlermaldung ohne Unterstrich:
"error: `getch' was not declared in this scope"Ich habe jetzt "wait()" statt "getch()" eingefügt. Da kann ich das Programm compilieren. Wenn ich es öffne bleibt es aber nur eine Sekunde (ohne allem nur den Bruchteil einer Sekunde).
wait beiseite. Das echte Problem ist ja nicht das Schliessen sondern das Ergebnis.
-
Ich hab keinen Plan von Polarkoordinaten :oD soviel zuerst.
1. #include <conio.h> könnte dein getch() - Problem loesen
2. bei der Ausgabe printf("...", x) << den Adressoperator weglassen. Hier brauchst du keine Referenz.
3. Bei den Funktionen cos und sin wird als Argument das Bogenmass uebergeben
siehe hierzu http://www.willemer.de/informatik/cpp/mathlib.htmPunkt 3 kann bei dir durchaus richtig sein. Aber ich weiß halt nicht, was die
Werte bei der Umrechnung darstellen. Schon garnicht weiß ich, was ein Azimut ist
-
BasicMan01 schrieb:
Ich hab keinen Plan von Polarkoordinaten :oD soviel zuerst.
1. #include <conio.h> könnte dein getch() - Problem loesen
2. bei der Ausgabe printf("...", x) << den Adressoperator weglassen. Hier brauchst du keine Referenz.
3. Bei den Funktionen cos und sin wird als Argument das Bogenmass uebergeben
siehe hierzu http://www.willemer.de/informatik/cpp/mathlib.htmPunkt 3 kann bei dir durchaus richtig sein. Aber ich weiß halt nicht, was die
Werte bei der Umrechnung darstellen. Schon garnicht weiß ich, was ein Azimut istDanke. Mit <conio.h> hat das Beenden funktioniert. Mit den anderen 2 Punkten hast du mir auch geholfen. Das programm funktioniert jetzt einwandfrei.