Programm wartet nicht auf Eingabe von der Tastatur



  • Ich habe einen kleinen Rechne für Prozentrechnungen gemacht.
    Erstmal der code:
    das ist nur ein ausschnitt

    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;
    				}
    

    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;            //Prozentwert
    

    ein int wäre angebrachter... zur Erklärung möchte ich besser einen Profi bitten.

    int PW;            //Prozentwert
    

    nochmal 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_de

    Tommy


Anmelden zum Antworten