Kreisumfang berechnen lassen - aber Fehler vorhanden. Hilfe.
-
BunterVogel schrieb:
habe folgendes geändert [...]
und dir ein Speicherleck eingefangen. Obwohl dir SeppJ schon gesagt hat dass das Quark ist mit dem new.
Aber nun kommt diese Meldung:
gui.cpp(65): warning C4129: '*': Nicht erkannte Folge von EscapesequenzJa.
Den Code dazu hast du uns diesmal nicht gezeigt. Überhaupt macht es den Eindruck, als versuchtest du mit gefährlichem Halbwissen, den Compiler ruhigzustellen, aber ohne genau zu wissen, was du tust. Dann kannst du selbst wenn es compiliert nicht davon ausgehen, dass dein Programm läuft, geschweige denn dass es tut was du erwartest.
Darf man fragen, wie du C++ lernst? (Buch? Tutorial? Beim Kumpel über die Schulter schauen? Copy&Paste?)
-
gui.cpp
#include <iostream> #include <string> using namespace std; #include "Kreis.h" #include "gui.h" void CGui::application() { float r; // Radius CKreis *poi = NULL; //float a; // Seitenlaenge a //float b; // Seitenlaenge b int auswahl; //Auswahl do { cout << "\nWelches Teil hat das Kamerasystem erfasst?:\t"; cout << "\n1 = Kreis?:\t"; cout << "\n2 = Rechteck?:\t"; cout << "\nGeben Sie 1 oder 2 ein!:\t"; if ((cin >> auswahl)&& ((auswahl==1)||(auswahl==2))) { // hat geklappt => raus aus der schleife break; } else { cerr << "Sie haben ein ungueltiges Zeichen eingegeben! Versuchen Sie es erneut.\n"; cin.clear(); // Fehlerzustand zurücksetzen fflush(stdin); } } while (cin); if(auswahl=1) { do { cout << "\nGeben Sie den Radius ein:\n"; if ((cin >> r)&&((r>1)&&(getchar()=='\n'))) { // hat geklappt => raus aus der schleife break; } else { cerr << "Sie haben eine ungueltige Zahl eingegeben! Versuchen Sie es erneut.\n"; cin.clear(); // Fehlerzustand zurücksetzen fflush(stdin); } } while (cin); } poi = new CKreis(r); cout <<"n\**********************************************************\n\n"; cout << "\nDer Kreisumfang des Kreises beträgt:"; cout << "\t"; cout << poi->KreisSL(); cout << "\n"; }Ich lerne das in der Schule, mache das Programm als Vorbereitung für ne Klausur momentan. Versuch das gerade mit Copy%Paste/Internet zu verstehen^^ Wenn ich das verstanden hätte, würd' ich ja hier net fragen.
-
Dann mach doch erst einmal alles weg, was ich beanstandet habe, fflush(stdin), das komische getline, das new. Dann ist das schon einmal doppelt so elegant und Fehler sind auch viel unwahrscheinlicher. Und dann kann man sich das nochmal angucken und die restlichen Fehler rausmachen und das Programm so umschreiben, dass man diese Fehler in Zukunft vermeidet.
edit: Noch ein dicker Fehler in Zeile 37.
Mach auch unbedingt mal Compilerwarnungen an, diese Fehler kann dir nämlich auch der Compiler finden, auch wenn er strenggenommen an der Stelle nicht mit einem Fehler abbrechen darf.
-
Schau dir mal dieses hier genau an:
cout <<"n\**********************************************************\n\n";
-
#include <iostream> #include <string> using namespace std; #include "Kreis.h" #include "gui.h" void CGui::application() { float r; // Radius CKreis *poi = NULL; // <- weg machen? //float a; // Seitenlaenge a //float b; // Seitenlaenge b int auswahl; //Auswahl do { cout << "\nWelches Teil hat das Kamerasystem erfasst?:\t"; cout << "\n1 = Kreis?:\t"; cout << "\n2 = Rechteck?:\t"; cout << "\nGeben Sie 1 oder 2 ein!:\t"; if ((cin >> auswahl)&& ((auswahl==1)||(auswahl==2))) { // hat geklappt => raus aus der schleife break; } else { cerr << "Sie haben ein ungueltiges Zeichen eingegeben! Versuchen Sie es erneut.\n"; cin.clear(); // Fehlerzustand zurücksetzen cin.ignore(1); } } while (cin); if(auswahl=1) { do { cout << "\nGeben Sie den Radius ein:\n"; if ((cin >> r)&&((r>1)&&(getchar()=='\n'))) { // hat geklappt => raus aus der schleife break; } else { cerr << "Sie haben eine ungueltige Zahl eingegeben! Versuchen Sie es erneut.\n"; cin.clear(); // Fehlerzustand zurücksetzen cin.ignore(1); } } while (cin); } poi = new CKreis(r); // <- weg machen? cout <<"n\\**********************************************************\\n\\n"; cout << "\nDer Kreisumfang des Kreises beträgt:"; cout << "\t"; cout << KreisSL(); cout << poi->KreisSL(); // <- weg machen? cout << "\n"; }Das mit der Folge von Escape.... habe ich gelöst in dem ich das \ mit \\ersetzt hab da oben. Habe das mit dem "new" auch herauskommentiert erst einmal. Aber mit den weg-kommentierten "weg machen?"-Codes kam der Fehler bei KreisSL nicht, nun kommt er wieder. hmmm?
-
Bist du sicher, dass du nicht eher "\n*****..." haben willst?
Und wieso muss die Berechnung des Umfangs ein Member sein? Erstelle dir doch einfach eine freie Funktion dafür
-
BunterVogel schrieb:
Versuch das gerade mit Copy%Paste/Internet zu verstehen
Wenn du etwas in Mathe nicht verstehst, versuchst du es dann
a) vom Nachbarn stumpf abzuschreiben (= Copy&Paste), oder
b) liest es nochmal im Buch nach und versuchst es zu verstehen und selbst zu lösen?
(Vorausgesetzt, du möchtest es wirklich verstehen und nicht einfach nur vermeiden, am nächsten Tag ohne Hausaufgaben dazustehen)Ihr habt doch sowas wie ein Buch für den Unterricht, oder?
Wenn ich das verstanden hätte, würd' ich ja hier net fragen.
Du fragst aber nicht nach den Dingen, die du nicht verstanden hast, sondern nur, wie du den Compiler dazu bringst, nicht mehr zu meckern.
-
BunterVogel schrieb:
habe ich gelöst in dem ich das \ mit \\ersetzt hab da oben.
pumuckl schrieb:
Überhaupt macht es den Eindruck, als versuchtest du mit gefährlichem Halbwissen, den Compiler ruhigzustellen, aber ohne genau zu wissen, was du tust.
pumuckl hat ja so Recht. Du hast bloß so lange Zeichen eingefügt und gelöscht, bis es compilierte
. Das ist nicht programmieren! Code ist Logik pur! Du musst von jedem einzelnen Zeichen in deinem Programm wissen, warum es dort ist und was es dort tut!Wie soll man dir helfen, wenn deine Strategie "Versuch und Irrtum" ist?
-
Du könntest Zeile 10-62 in gui.cpp löschen, dann meckert der Compiler vermutlich nicht mehr
*SCNR*
-
Was übrigens hilft, falls du auf einer IDE "programmierst", einmal den Code zu formatieren, dann ist es auch für andere leichter zu verstehen. Inwieweit das Texteditoren wie Notepad++(Win) oder Emacs/vim(unix) können weiß ich nicht
