Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: DOS und Win32-Konsole ::  Fehlerhafter Code. Was tun??  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
marktrash
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.03.2010
Beiträge: 20
Beitrag marktrash Mitglied 21:58:01 04.03.2010   Titel:   Fehlerhafter Code. Was tun??            Zitieren

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):

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#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;

}
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#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;

}
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#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;

}
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9274
Beitrag _matze Mitglied 22:07:55 04.03.2010   Titel:              Zitieren

Diese Zeile

C/C++ Code:
    scanf ("%s", successfulscanfinish);
C/C++ Code:
scanf ("%s", successfulscanfinish);
C/C++ Code:
    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:

C/C++ Code:
void wait ()
{
    FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
    _getch();
}

//einfach am Ende der main-Funktion wait() aufrufen
C/C++ Code:
void wait ()
{
FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
_getch();
}

//einfach am Ende der main-Funktion wait() aufrufen
C/C++ Code:
void wait ()
{
    FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
    _getch();
}

//einfach am Ende der main-Funktion wait() aufrufen

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?


Zuletzt bearbeitet von _matze am 22:08:55 04.03.2010, insgesamt 1-mal bearbeitet
marktrash
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.03.2010
Beiträge: 20
Beitrag marktrash Mitglied 22:22:27 04.03.2010   Titel:              Zitieren

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.
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9274
Beitrag _matze Mitglied 22:26:00 04.03.2010   Titel:              Zitieren

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. :D 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).

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
marktrash
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.03.2010
Beiträge: 20
Beitrag marktrash Mitglied 22:34:28 04.03.2010   Titel:              Zitieren

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.
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9274
Beitrag _matze Mitglied 22:45:56 04.03.2010   Titel:              Zitieren

windows.h inkludieren. Gute Nacht! :)

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
marktrash
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.03.2010
Beiträge: 20
Beitrag marktrash Mitglied 22:54:03 04.03.2010   Titel:              Zitieren

_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.

_________________
Microsoft Windows 7 Home Premium
Service Pack 1
Code::Blocks 10.05
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9274
Beitrag _matze Mitglied 06:32:53 05.03.2010   Titel:              Zitieren

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.

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
marktrash
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.03.2010
Beiträge: 20
Beitrag marktrash Mitglied 12:44:36 05.03.2010   Titel:              Zitieren

_matze schrieb:

Probier mal stattdessen "getch" ohne Unterstrich.


dann kommt die gleiche Fehlermaldung ohne Unterstrich:
"error: `getch' was not declared in this scope" :confused:

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. :(

_________________
Microsoft Windows 7 Home Premium
Service Pack 1
Code::Blocks 10.05


Zuletzt bearbeitet von marktrash am 14:19:42 05.03.2010, insgesamt 2-mal bearbeitet
BasicMan01
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.02.2004
Beiträge: 646
Beitrag BasicMan01 Mitglied 22:42:30 05.03.2010   Titel:              Zitieren

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.htm

Punkt 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 :D

_________________
Der Vorteil in der Klugheit besteht darin, dass man sich dumm stellen kann.
(Code::Blocks 10.5, mingw32 gcc 4.4.1)
C/C++ Forum :: DOS und Win32-Konsole ::  Fehlerhafter Code. Was tun??  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.