Programm wartet nicht auf Eingabe von der Tastatur
-
Ich habe einen kleinen Rechne für Prozentrechnungen gemacht.
Erstmal der code:
das ist nur ein ausschnittcout << "Sie haben Prozentrechnung gewählt." << endl; cout << "Was wollen sie berechnen?" << endl; cout << "S: Prozentsatz" << endl << "W: Prozentwert" << endl << "G: Grundwert" << endl; cin >> a; if (a == 'S') { cout << "Sie haben Prozentsatz gewählt" << endl; cout << "Geben sie W und G ein." << endl; cout << "W:" << endl; cin >> PW; cout << "G:" << endl; cin >> GW; E = PW / GW * 100; cout << "Das Ergebnis ist:" << E << endl; } if (a == 'W') { cout << "Sie haben Prozentwert gewählt" << endl; cout << "Geben sie S und G ein." << endl; cout << "S:" << endl; cin >> PS; cout << "G:" << endl; cin >> GW; E = GW * PS / 100; cout << "Das Ergebnis ist:" << E << endl; } if (a == 'G') { cout << "Sie haben Grundwert gewählt" << endl; cout << "Geben sie S und W ein." << endl; cout << "S:" << endl; cin >> PS; cout << "W:" << endl; cin >> PW; E = PW / PS * 100; cout << "Das Ergebnis ist:" << E << endl; } } if (A == 'T') { cout << "Geben sie einen Term mit max. 2 Zahlen und +, -, *, / ein." << endl; cin >> x >> R >> y; if (R == '+') { E = x + y; cout << "Das Ergebnis ist:" << E << endl; } if (R == '-') { E = x - y; cout << "Das Ergebnis ist:" << E << endl; } if (R == '*') { E = x * y; cout << "Das Ergebnis ist:" << E << endl; } if (R == '/') { E = x / y; cout << "Das Ergebnis ist:" << E << endl; }Das Problem ist nun, wenn ich entwerer grundsatz, Prozentwert oder Prozentsatz auswähle und dann die fehlenden werte eingeben soll (nehme jetzt als Beispiel Grundwert), dann wird ein falsches Ergebnis herausgegeben bevor ich überhaupt die zweite vorgabe angegeben hab.
heißt: Es wird nach dem Prozentsatz gefragt, ich gebe eine zahl ein, drück enter, und es erscheint die nachfrage für den Prozentwert, jedoch ohne dass ich etwas eingeben kann ist direkt dadrunter: Das Ergebnis ist: und dann 0 oder irgendetwas anderes.
beizumerken ist vll. noch dass PS, PW und GW den dateityp char haben und für Prozentsatz, Prozentwert und Grundwert stehen
schwer zu verstehen, zur not lade ich die konsolendatei hoch
hoffe um hilfe
-
Hi,
mach doch mal ne Kopie der Console.
Gruss
-
http://www.file-upload.net/download-4448720/C--_Projekt_1.exe.html
nen downloadlink.
da der teil mit prozentrechnung zu einem kompletten rechner gehört ist davor noch anderes zeugs.
nimm einfach algebra und dann prozentrechnung
dann kannst dus selber testen
-
ich sitz hier an linux
ich kann und will keine win.exe ausführenn 
Poste doch mal den Rest der Funktion.
-
Schau dir mal an was cin.fail() ist. Wenn der Benutzer hier irgendwo etwas anderes als exakt den gesuchten Typ eingibt, dann wird das Fail Bit gesetzt und sämtliche Input Operationen rauschen von dort weg durch, weil es nirgendwo gecleared wird...
-
@ dot
kapier ich net
@ tommy
meinst du nen screen oder den restlichen code?#include<iostream> using namespace std; int main() { float P; //Pi float r; //Radius float x; //Erste Variable float y; //Zweite Variable float E; //Ergebnis float h; //Höhe float l; //Länge float l_2; //Länge 2 float l_3; //Länge 3 float l_4; //Länge 4 float UE_1; //Unterergebnis 1 char a; //Auswahl (Bei Fläche oder Umfang) char W; //Wahl (Bei Algebra oder Geometrie) char R; //Rechenzeichen char b; //Beenden char A; //Auswahl (bei geometrie) char PS; //Prozentsatz char PW; //Prozentwert char GW; //Grundwert P = 3.141592; //Definierung Pi cout << "Algebra (a) oder Geometrie (g)?" << endl; cin >> W; if (W == 'g') { cout << "Was wollen sie berechnen?" << endl; cout << "K: Kreis" << endl << "R: Rechteck" << endl << "T: Trapez" << endl << "D: Dreieck" << endl << "P: Parallelogramm" << endl; cin >> A; if (A == 'K') { cout << "Sie haben Kreis gewählt." << endl << "Was möchten sie berechnen?" << endl << "U: Umfang" << endl << "F: Fläche" << endl; cin >> a; if (a == 'U') { cout << "Sie haben Umfang gewählt." << endl; cout << "Geben sie den Radius ein:" << endl; cin >> r; E = 2 * r * P; cout << "Der Umfang beträgt:" << E << endl; } if (a == 'F') { cout << "Sie haben Fläche gewählt." << endl; cout << "Geben sie den Radius ein:" << endl; cin >> r; E = r * r * P; cout << "Die Fläche beträgt:" << E << endl; } } if (A == 'R') { cout << "Sie haben Rechteck gewählt." << endl << "Was möchten sie berechnen?" << endl << "U: Umfang" << endl << "F: Fläche" << endl; cin >> a; if (a == 'U') { cout << "Sie haben Umfang gewählt." << endl; cout << "Geben sie Höhe und Länge ein" << endl; cout << "Höhe:" << endl; cin >> h; cout << "Länge:" << endl; cin >> l; E = 2 * h + 2 * l; cout << "Das Ergebnis ist:" << E << endl; } if (a == 'F') { cout << "Sie haben Fläche gewählt." << endl; cout << "Geben sie Höhe und Länge ein" << endl; cout << "Höhe:" << endl; cin >> h; cout << "Länge:" << endl; cin >> l; E = h * l; cout << "Das Ergebnis ist:" << E << endl; } } if (A == 'T') { cout << "Sie haben Trapez gewählt." << endl << "Was möchten sie berechnen?" << endl << "U: Umfang" << endl << "F: Fläche" << endl; cin >> a; if (a == 'U') { cout << "Sie haben Umfang gewählt." << endl; cout << "Geben sie die Längen der Vier Seiten an" << endl; cout << "Seite 1:" << endl; cin >> l; cout << "Seite 2:" << endl; cin >> l_2; cout << "Seite 3:" << endl; cin >> l_3; cout << "Seite 4:" << endl; cin >> l_4; E = l + l_2 + l_3 + l_4; cout << "Das Ergebnis ist:" << E << endl; } if (a == 'F') { cout << "Sie haben Fläche gewählt." << endl; cout << "Geben sie die Längen der Parallelen Seiten und die Höhe an." << endl; cout << "Seite 1:" << endl; cin >> l; cout << "Seite 2:" << endl; cin >> l_2; cout << "Höhe" << endl; cin >> h; UE_1 = l + l_2; E = UE_1 / 2 * h; cout << "DasErgebnis ist:" << E << endl; } } if (A == 'D') { cout << "Sie haben Dreieck gewählt." << endl << "Was möchten sie berechnen?" << endl << "U: Umfang" << endl << "F: Fläche" << endl; cin >> a; if (a == 'U') { cout << "Sie haben Umfang gewählt." << endl; cout << "Geben sie die Längen der Seiten an." << endl; cout << "Seite 1:" << endl; cin >> l; cout << "Seite 2:" << endl; cin >> l_2; cout << "Seite 3:" << endl; cin >> l_3; E = l + l_2 + l_3; cout << "Das Ergebnis ist:" << E << endl; } if (a == 'F') { cout << "Sie haben Fläche gewählt." << endl; cout << "Geben sie die Länge und die Höhe an." << endl; cout << "Höhe:" << endl; cin >> h; cout << "Länge:" << endl; cin >> l; E = l * h / 2; cout << "Das Ergebnis ist:" << E << endl; } } if (A == 'P') { cout << "Sie haben Parallelogramm gewählt." << endl << "Was möchten sie berechnen?" << endl << "U: Umfang" << endl << "F: Fläche" << endl; cin >> a; if (a == 'U') { cout << "Sie haben Umfang gewählt." << endl; cout << "Geben sie die Längen von zwei nicht parallelen Seiten an." << endl; cout << "Seite 1:" << endl; cin >> l; cout << "Seite 2:" << endl; cin >> l_2; E = 2 * l + 2 * l_2; cout << "Das Ergebnis ist:" << E << endl; } if (a == 'F') { cout << "Sie haben Fläche gewählt." << endl; cout << "Geben sie die Länge und die Höhe an." << endl; cout << "Höhe:" << endl; cin >> h; cout << "Länge:" << endl; cin >> l; E = l * h; cout << "Das Ergebnis ist:" << E << endl; } } } if (W == 'a') { cout << "Was wollen sie berechnen?" << endl; cout << "T: normale Terme" << endl; cout << "P: Prozentrechnung" << endl; cin >> A; if (A == 'P') { cout << "Sie haben Prozentrechnung gewählt." << endl; cout << "Was wollen sie berechnen?" << endl; cout << "S: Prozentsatz" << endl << "W: Prozentwert" << endl << "G: Grundwert" << endl; cin >> a; if (a == 'S') { cout << "Sie haben Prozentsatz gewählt" << endl; cout << "Geben sie W und G ein." << endl; cout << "W:" << endl; cin >> PW; cout << "G:" << endl; cin >> GW; E = PW / GW * 100; cout << "Das Ergebnis ist:" << E << endl; } if (a == 'W') { cout << "Sie haben Prozentwert gewählt" << endl; cout << "Geben sie S und G ein." << endl; cout << "S:" << endl; cin >> PS; cout << "G:" << endl; cin >> GW; E = GW * PS / 100; cout << "Das Ergebnis ist:" << E << endl; } if (a == 'G') { cout << "Sie haben Grundwert gewählt" << endl; cout << "Geben sie S und W ein." << endl; cout << "S:" << endl; cin >> PS; cout << "W:" << endl; cin >> PW; E = PW / PS * 100; cout << "Das Ergebnis ist:" << E << endl; } } if (A == 'T') { cout << "Geben sie einen Term mit max. 2 Zahlen und +, -, *, / ein." << endl; cin >> x >> R >> y; if (R == '+') { E = x + y; cout << "Das Ergebnis ist:" << E << endl; } if (R == '-') { E = x - y; cout << "Das Ergebnis ist:" << E << endl; } if (R == '*') { E = x * y; cout << "Das Ergebnis ist:" << E << endl; } if (R == '/') { E = x / y; cout << "Das Ergebnis ist:" << E << endl; } } } cout << "Geben sie ein beliebiges Zeichen ein und Drücken sie Enter zum beenden" << endl << "des Programms" << endl; cin >> b; return 0; }habe auch etwas gemerkt. wenn ich als ersten wert zahlen über 10 nehme kommt der fehler. bei einstelligen sachen klappt alles.
-
Golol schrieb:
@ dot
kapier ich net
Was genau kapierst du nicht?
-
Ich kapier net:
-cin.fail()
-exakt den gesuchten Typ
-Fail Bit gesetzt
-Input Operationen rauschen
-nirgendwo gecleared wird
im endeffekt hab ich kein plan.
Und ich hab das programm gelöst. ich hatte ja gemerkt dass es mit beträgen die höher als 10 sind nicht ging und dachte mirn dass das vielleicht daran liuegt das der dateityp nicht mehr schafft. wollte dann einfach double neben und hab gemerkt dass GW, PW und PS CHAR statt float hatten. ich hatte sooft char genommen dass ich automatisch char genommen hab.
jetzt klappt alles. danke für die hilfe und sorry dass mir nach dem posten der frage die lösung einfällt ><. ich denk eine stunde drüber nach, poste die frage und dann merk ichs :D.
-
-
probier mal mit extra Ausgabe des Eingabewertes:
cout << "Sie haben Prozentsatz gewählt" << endl; cout << "Geben sie W und G ein." << endl; cout << "W:" << endl; cin >> PW; cout << "W eingabe:" << int(PW) << endl; cout << "G:" << endl; cin >> GW; E = PW / GW * 100; cout << "Das Ergebnis ist:" << E << endl;Ein teil deines Problem liegt also an
char PW; //Prozentwertein int wäre angebrachter... zur Erklärung möchte ich besser einen Profi bitten.
int PW; //Prozentwertnochmal probieren mit der extra Ausgabe.
Des weiteren würde ich dir switch für solche codeblöcke und die Aufsplittung in einzelne Funktionen empfehlen.
Sowie evtl solche Eingaben zum debugen auszugeben.

Des weiteren lässt dein Code nur Grossbuchstaben zu, muss das sein?
Viel Erfolg beim tüfteln!
Tommy
-
ähhhhhhhhhh, egal... ich sollte nochmals lesen vorm senden...
aber
Und ich hab das programm gelöst. ich hatte ja gemerkt dass es mit beträgen die höher als 10 sind nicht ging und dachte mirn dass das vielleicht daran liuegt das der dateityp nicht mehr schafft.
da würd ich nicht die Hand ins Feuer für legen -> char "schafft" mehr als 10.
-
du meinst ich sollte machen dass man wenn da steht W: Prozentwert man W aber auch w eingeben kann? ja wär schlau. ob ich das noch nachträgluch mache weiß ich net weil das war ja nur ne übung aber es wär schon schlauer.
das müste ich dann machen mit if (a == W || a == w) oder?
und ich habe if else benutzt weil das noch die kenntnisse waren die ich hatte. bei meinem zweiten buch fängt jetzt erst if else an und wie das ging wusste ich noch von vorher
-
Golol schrieb:
das müste ich dann machen mit if (a == W || a == w) oder?
Ist ne gute Idee, oder?

Schau dir mal die switch an für solche grossen Blöcke wie in deinen ersten Posts.
http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/c++_switch_deTommy