C++ ][ Zahleingabe erzwingen / Tippfehler verhindern?



  • Hallo zusammen,

    dies ist mein erster Beitrag als "C++"-Neuling :). Ich habe schon ein wenig angefangen ein Programm zu schreiben, welches vom User ausgewählte änderungen an der Registry vornimmt. Soweit alles schön und gut. Nur es gibt einige Bugs.

    Wenn jede Eingabe richtig ist, läuft das Programm schön durch (obwohl ich nicht behaupten will, dass es perfekt geschrieben ist ;))

    Folgendes erstes Problem:

    Ganz unten im Programm wird in der Registry geschrieben, dazu wollte ich eine extra Abfrage machen, um das nocheinmal zu bestätigen:

    system("cls");
    cout << "  ==================================================================\n";
    cout << "    ==  Wollen sie ihre Einstellungen in die Registry hinzufuegen?  ==\n";
    cout << "    ==  !!Achtung!! (Hier wird die Registry geaendert!) !!Achtung!! ==\n";
    cout << "    ==================================================================\n";
    cout << "                           press (j)a or (n)ein: ";
    	    cin >> auswahl;
     		         if (auswahl == 'j'||auswahl=='J')
                              {
    	    				  cout << "\n";
      	 					  nochmal:		//label nochmal:
    				 		  cout << "Bist du dir wirklich sicher, dass du deine Registry bearbeiten lassen willst?\n\n";
      	 					  cout << "       SicherungsCode: "<< sicherungsabfrage << endl;
      	 					  cout << "\n";
      	 					  cout << "Wiederholen sie den SicherungsCode: ";
      	 					  cin >> sicherungseingabe;
      	 					  cout << "\n";
    		   				  if (sicherungsabfrage == sicherungseingabe)
    				           {
    	   	 					cout << "     Eingabe Korrekt! Ausgewaehlte Optionen werden abgearbeitet.";
    
    ---------------------- REG SCHLÜSSEL WERDEN BEARBEITET ----------------------
    
    				           }	// Ende der zweiten Sicherungsabfrage.	
    							else
    							    {
    								system("cls");
    								cout << "======================\n";
    	   	 						cout << "\"Key incorrect...\"\n\n";
    								cout << "SicherungsCode: "<< sicherungsabfrage << endl;	  
                              		cout << "Deine Eingabe:  "<< sicherungseingabe << endl;
                              		cout << "======================\n";
    								cout << "\n";
    								cout << "Wollen sie es nochmal Probieren?\n";
    								cout << "press (j)a or (n)ein ";
    								cin >> auswahl;
    								if (auswahl == 'j'||auswahl == 'J')
    								      {
    									   	system("cls");
    			   		                    goto nochmal;	//goto label "nochmal:"
    								      }
    			                    } //Ende der else anweisung der zweiten sicherungsabfrage
     					      } // Ende der ersten Sicherungsabfrage.
    

    Die Variable "sicherungsabfrage" wird durch einen Zufallszahlengenerator erzeugt. Doch wenn man in die variable "sicherungseingabe" (integer) buchstaben eintippt. scheint das programm in einer endlosschleife zu sein. Das Bild flackert nur noch.
    Wie kann ich dort die Eingabe von Zahlen erzwingen?

    -----------------------------------------------------------------------------------------

    Zweites Problem:

    Am Anfang bekommt der User fragen gestellt, ob er verschiedene Änderungen aktivieren möchte um sie später entweder in eine .reg datei zu schreiben oder direkt die registry zu bearbeiten.

    eine Variable auswahl (char) als eingabe.
    Es soll eigentlich (j)a oder (n)ein gedrückt werden. bei 'j' oder 'J' wird dem array für die zuweisungen ob ja oder nein eine 1 zugeordner per if-anweisung.
    Dieses System läuft eigentlich die ganze Zeit.
    Auch jedes mal mit der gleichen auswahlvariable, in der das 'j' oder das 'J' drinne stehen soll.
    Wenn ich aber jetzt z.B. bei der ersten Abfrage 10 j`s eingebe, dann übernimmt der diese für die nächsten abfragen.
    Frage ist also, wie kann ich dem sagen, dass nur ein buchstabe zählt und dass der die nicht für die folgenden Auswahlmöglichkeiten übernimmt?

    Ich hoffe, dass ich mich klar genug ausgedrückt habe 😉

    Danke schonmal im Vorraus.

    mfg
    _fym_

    edit: warum wird "V o r r a u s" zensiert?



  • Die Eingabe muss immer mit Enter bestätigt werden wenn du mit dem cin-Stream arbeitest. Wenn du nur in ein char einliest bleibt der Rest im Buffer. Den Buffer kannst du so löschen:

    std::cin.clear();
    std::cin.ignore(std::cin.rdbuf()->in_avail());
    

    achja.. es heißt "voraus"



  • @Fireflow
    Hallo und Danke erstmal,

    2 Fragen 😉

    1. Wo genau muss dein Code stehen?
    2. Was genau macht dieser Code? (Was passiert bei welchem schritt genau? :))

    danke im VORAUS 🙂

    mfg
    _fym_



  • Wenn man anstatt 'j' z.B. 'j123' eingibt liest du mit cin>>auswahl nur das 'j' ein, die 123 wartet im Buffer.

    Mit cin.clear() löscht du erstmal die Fehlerbits (falls es welche gibt). Das andere leert den Buffer


Anmelden zum Antworten