Fehler bei cin.get(,)



  • Hi,

    Ich hab ein Problem bei einer Übungsaufgabe aus meinem C++ Buch. Die Funktion cin.get Funktoniert irgendwie nicht so, wie sie soll.

    #include <iostream>
    
    using namespace std;
    
    //Funktionen
    
    int main ()
    {
    
    	//Strucktur Felder
    
    	struct st_Felder  {
    
    	bool bFeldstatus;
    	char chFeldName[10];
    	int Yposi;
    	int Xposi;
    
    	};
    
    	//Variabeln
    	int xEingabe;
    	int yEingabe;
    	int Auswahl;
    	int FelderDurchzaehler;
    	st_Felder Felder[25];
    	FelderDurchzaehler = 0;
    
    	//Felder zuweißungs schleife
    
    	for (int i = 1; i < 6 ; i++)
    	{
    		for (int j = 1; j < 6 ; j++)
    		{
    
    			Felder[FelderDurchzaehler].Yposi = i;
    			cout << "Koordinaten von Feld "<< FelderDurchzaehler+1  << " Y-posi: " << Felder[FelderDurchzaehler].Yposi;
    			Felder[FelderDurchzaehler].Xposi = j;
    			cout << " X-posi:  " << Felder[FelderDurchzaehler].Xposi << endl;
    			FelderDurchzaehler ++;
    
    		}
    	}
    
    	//Menü Schleife
    
    		do {
    
    		cout << "     Feldmaster 1.0" << endl;
    		cout << "-----------------------" << endl;
    		cout << "1. Spielfeld anzeigen" << endl;
    		cout << "2. Feld besetzen" << endl;
    		cout << "3. Felddaten anzeigen" << endl;
    		cout << "4. Spielfeld löschen" << endl;
    		cout << "5. Programm benden" << endl;
    
    		cin >> Auswahl;
    
    		cout << "\n\n" << Auswahl << "\n\n";
    
    		//Menü Auswahl
    		switch(Auswahl)
    		{
    			//Spielfeld schreiben
    			cout << "\n\n" << Auswahl << "\n\n";
    			case(1):
    			{
    				FelderDurchzaehler = 0;
    
    				for (int i = 1; i < 6 ; i++)
    				{
    					for (int j = 1; j < 6 ; j++)
    					{
    
    						if (Felder[FelderDurchzaehler].bFeldstatus == true)
    						{ 
    							cout << "X";
    						}
    						else
    						{
    						   cout << "-";
    						}
    
    						FelderDurchzaehler ++;
    
    					}
    
    					cout << endl;
    				}
    			}break;
    			//Feld besetzen
    			case(2):
    			{
    				cout << "Gebe X-Wert ein: ";
    				cin >> xEingabe;
    				cout << "Gebe Y-Wert ein: ";
    				cin >> yEingabe;
    				cout << "Gebe einen Namen für das Feld ein: ";
    
    				for(int g = 0; g<25; g++ )
    				{
    					if ( Felder[g].Yposi == yEingabe )
    					{
    						if (Felder[g].Xposi == xEingabe )
    						{
    							Felder[g].bFeldstatus = true;	
    							cout << "Feld" << g << "mit den Koordinaten " << Felder[g].Xposi << " und " << Felder[g].Yposi <<	" wurde true" << endl;				
    							cout << "Gebe einen Namen für das Feld ein: ";
    							cin.get (Felder[g].chFeldName, 10);
    							cin.ignore;
    						}
    
    					}
    				}
    
    			}break;
    			//Felddaten anzeigen
    			case(3):
    			{
    				cout << "Felddaten anzeigen" << endl;
    			}break;
    			//Spielfeld loeschen
    			case(4):
    			{
    				cout << "Spielfeld loeschen" << endl;
    			}break;
    			//Spiel bennden
    			case (5):
    			{
    				cout << "Vielen Dank fuers benutzen von Feldmaster 1.0" << endl;
    			}break;
    			//Falsche eingabe
    			default:
    			cout << "Bitte Zahl von 1-5 Ausweahlen" << endl;
    		}
    
    		cout << endl;
    
    	} while(Auswahl != 5);
    
    	return 0;
    
    }
    

    Das Programm gibt zwar keinen Fehler aus, aber kommt in den zeilen 114/115 in eine Endlosschleife, in der es das Menü immer und immer wieder neu schreibt.. Wenn ich die Zeilen 114 und 115 auskommatiere, dann läuft das Programm perfekt..

    Hier funktoniert irgendwas nicht..

    cin.get (Felder[g].chFeldName, 10);
    							cin.ignore;
    

    Ich würde mich über unterstützung freuen 🙂



  • Du musst wohl nach dem Einlesen (cin) den Standard-Eingabepuffer (stdin) leeren.

    Zum Beispiel so:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39349-and-highlight-is-fflush+stdin.html



  • Suchfunktion bemüht? Vielleicht hilft das -> http://www.c-plusplus.net/forum/viewtopic-var-t-is-210036.html


Anmelden zum Antworten