cin.get >> Endlosschleife ??? // noch ne Frage
-
Hallo, ich bin gerade dabei mit C++ ein kleines 2D Feld zu schreiben welches mittels 2D Array erstellt wird.
Jede Zelle hat einen bool-wert der besagt ob das feld schon belegt ist oder nicht... je nach dem werden bei der Grafischen ausgabe" . " oder " x " dargestellt.Außerdem soll noch jede Zelle einen Namen speichern, den ich mittels Abfrage festlegen möchte. Und hier sind wir auch schon beim Problem...
Aus irgendeinem Grund erzeugt diese Zeile eine Endlosschleife...
cin.get (Spielfeld[x][y].Name, 29);
Warum ???
Hier mal mein Quellcode:
// 2D-Array Aufgabe // #include <cstdlib> #include <iostream> #include <string> using namespace std; // Strukturen // struct S_Feldinfo { bool Besetzt; char Name[30]; }; // Konstaten // const int Breite = 5; const int Hoehe = 5; // Variablen // S_Feldinfo Spielfeld[Breite][Hoehe]; // Prototypen // void LoescheSpielfeld (); void ZeigeSpielfeld (); void ZeigeFelddaten (); void BesetzeFeld (); int main() { int Auswahl; // Gewaehlter Menuepunkt LoescheSpielfeld (); // Verarbeitung des Menues do { // Menue ausgeben // cout << " 2D MiniSpiel - Menue " << endl; cout << "------------------------" << endl; cout << "(1) - Spielfeld anzeigen" << endl; cout << "(2) - Feld besetzen" << endl; cout << "(3) - Felddaten anzeigen" << endl; cout << "(4) - Spielfeld loeschen" << endl; cout << "(5) - Programm beenden" << endl; // Eingabe abfragen cout << "\nAuswahl: "; cin >> Auswahl; // Verzweigung der Auswahl switch (Auswahl) { // Spielfeld anzeigen case (1): { cout << "\n\n Spielfeld " << endl; cout << "-----------" << endl; ZeigeSpielfeld (); cout << endl << endl << endl << endl << endl; } break; // Feld besetzten case (2): { cout << "\n\n Feld besetzen " << endl; cout << "------------------" << endl; BesetzeFeld (); cout << endl << endl << endl << endl << endl; } break; // Felddaten anzeigen case (3): { cout << "Felddaten anzeigen" << endl; cout << "------------------" << endl; ZeigeFelddaten (); cout << endl << endl << endl << endl << endl; } break; // Spielfeld loeschen case (4): { cout << "\n\nSpielfeld loeschen " << endl; cout << "--------------------" << endl; cout << "Feld wurde geloescht" << endl; LoescheSpielfeld (); cout << endl << endl << endl << endl << endl; } break; // Programm beenden case (5): { cout << " Programm beenden " << endl; cout << "-------------------------" << endl; cout << "Bis zum naechsten Mal ..." << endl; system("PAUSE"); } break; // Falsche Eingabe default: { cout << " Falsche Eingabe! " << endl; cout << "------------------\n\n" << endl; } } } while (Auswahl != 5); // Spiel beenden? cout << "Bis zum naechsten Mal" << endl; return 0; } // Main // Name: LoescheSpielfeld // // Aufgabe: Spielfeld zurück setzten // void LoescheSpielfeld () { for (int y=0; y<Hoehe; y++) { for (int x=0; x<Breite; x++) { Spielfeld[x][y].Besetzt = false; } } } // LoescheSpielfeld // Name: ZeigeSpielfeld // // Aufgabe: Spielfeld anzeigen // void ZeigeSpielfeld () { for (int y=0; y<Hoehe; y++) { for (int x=0; x<Breite; x++) { if (Spielfeld[x][y].Besetzt == true) { cout << "X "; } else { cout << ". "; } } cout << endl; } } // ZeigeSpielfeld // Name: BesetzeFeld // // Aufgabe: Feld besetzten // void BesetzeFeld () { int x = 0; // X, Y Kordinaten (Zwischenspeicher) int y = 0; do{ cout << "\nBitte X-Korinate (Zwischen 1 und " << Breite << ") eingeben: "; cin >> x; cout << "\nBitte Y-Kordinate (Zwischen 1 und " << Hoehe << ") eingeben: "; cin >> y; if (x < 1 || x > Breite || y < 1 || y > Hoehe) { cout << "\nFalsche Eingabe !"; } if (Spielfeld[x][y].Besetzt == true) { cout << "\nDieses Spielfeld ist schon besetzt, bitte waehlen sie ein anderes"; } } while (x < 1 || x > Breite || y < 1 || y > Hoehe || Spielfeld[x][y].Besetzt == true); cout << "Bitte Name eingeben: "; cin.ignore (); // Habe ich vergessen beim ersten mal cin.get (Spielfeld[x][y].Name, 29); cout << endl; x = x -1; // Korrekturwert fürs Feldarray y = y- 1; Spielfeld[x][y].Besetzt = true; } // BesetzeFeld // Name: ZeigeFelddaten // // Aufgabe: Inhalt eines Feldes ausgeben // void ZeigeFelddaten () { int x = 0; // X, Y Kordinaten (Zwischenspeicher) int y = 0; do{ cout << "\nBitte X-Korinate (Zwischen 1 und " << Breite << ") eingeben: "; cin >> x; cout << "\nBitte Y-Kordinate (Zwischen 1 und " << Hoehe << ") eingeben: "; cin >> y; if (x < 1 || x > Breite || y < 1 || y > Hoehe) { cout << "\nFalsche Eingabe !"; } } while (x < 1 || x > Breite || y < 1 || y > Hoehe); x = x -1; // Korrekturwert fürs Feldarray y = y- 1; if (Spielfeld[x][y].Besetzt == false) { cout << "\nFeld wurde noch nicht besetzt" << endl; } else { cout << "\nFeld ist besetzt von: " << Spielfeld[x][y].Name << endl; } } // ZeigeFelddaten
Hoffe mir kann jemand helfen
Danke schon mal im VorausEDIT: // habe den Fehler bereits selber gefunden... danke trotzdem
cin.ignore (); // Habe ich beim ersten Mal vergessen
-
hmmm, gibt doch noch ein kleines Problem, irgendwie gibt der mir den Namen eines besetzten Feldes nicht aus.
weiß jemand warum ?????
denke es liegt an Zeile 190 oder 231, doch ich weiß nicht, was da falsch sein soll...