C++ Array füllt sich selbst 0.o

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von avoir, 24. Mai 2008 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 24. Mai 2008
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    Hallo Leuts, ich bins wieder, und ich brauch mal wieder eure Hilfe....

    Ich hab mir na kleinere und eigentlich leichte Aufgabenstellung organisiert und habe nun versucht sie zu lösen...

    Erstmal zur Augabenstellung (ist aus nem Buch):
    Spoiler
    Ziel ist es ein zweidimensionales Array zu erzeugen, dass auf dem Bildschirm dargestellt werden kann. Dieses Array sill ein Spielfeld darstellen, das zu Beginn komplett leer ist. Um einige Aktionen durchführen zu können, soll folgendes Menü zur Verfügung stehen:

    1 - Spielfeld anzeigen
    2 - Feld besetzen
    3 - Felddaten anzeigen
    4 - Spielfeld loeschen
    5 - Programm beenden

    Das Spielfeld soll so aufgebaut sein, dass jedes Feld aus einer Instanz einer Struktur besteht. Diese Struktur soll zwei Elemente enthalten, die Aufschluss über das Feld geben. Zum einen ein bool-Wert, der angibt, ob das Feld besetzt ist oder nicht. Zum anderen einen String der den Namen des Feldes angibt. Man soll nun durch Eingabe von koordinaten deinem Feld einen Namen zuweisen können, wodurch dieses als besetzt markiert wird. Diese Koordinaten geben einafach die Indizes das Arrays an (z.B. x=2, y=4). Diese Zuweisung sol durch Menüpunkt 2 erfolgen.
    Analog dazu soll Menüpunkt 3 ebenfalls ein Koordinatenpaar abfragen und dadurch den Status des Feldes wiedergeben. Wenn es besetzt ist, soll der Name des Feldes wiedergegeben werden, ansonsten eine Meldung, dass es noch frei ist.

    Menüpunkt 1 soll das Feld auf dem Bildschirm zeichnen. Ist das Feld besetzt soll ein X gezeichnet werden, ansonsten ein einfacher Punkt. Die Namen spielen hier keine Rolle und werden nicht mit ausgegeben.

    (falls sich Fehler eingeschlichen haben beim abtippen, bitte verzeiht mir )

    So...
    mein Problem nun ist, dass wenn ich ein Feld besetze, es mir komischerweise noch ein weiteres aus heiterem Himmel besetzt....
    Am besten kann man es auf diesem Bild hier erkennen:

    Bild

    Wie man erkennen kann, ist mein Programm ziemlich fertig..... nur wenn ich jetzt mein Feld 3/3 setze, setzt sich auch automatisch das Feld 8/2 als besetzt....

    Ich weis allerdings nicht warum das so ist....

    Hier ist mein Quelltext...

    Code:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    
    //Ausnahmsweise werden hier Struktur und Array global gesetzt, um unnötige Komplexität zu umgehen
    //-----------------------------------------------------------------------------------------------
    struct S_FeldInfo
    {
     bool bBesetzt;
     char chName[30];
    };
    const int Breite = 10;
    const int Hoehe = 5;
    S_FeldInfo Spielfeld[Breite][Hoehe];
    
    
    // Prototypen
    //-----------
    void SpielfeldLoeschen();
    void SpielfeldAnzeigen();
    void SetzeFelddaten();
    void ZeigeFelddaten();
    
    
    int main()
    {
    
     SpielfeldLoeschen(); // Spielfeld initialisieren
    
     int Eingabe=0;
     while (Eingabe!=5)
     {
     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;
     cout << "-----------------------" << endl;
     
     cout << "Auswahl: ";
     cin >> Eingabe;
     cout << endl;
    
     switch(Eingabe)
     {
     case (1): SpielfeldAnzeigen(); break;
     case (2): SetzeFelddaten(); break;
     case (3): ZeigeFelddaten(); break;
     case (4): SpielfeldLoeschen(); break;
     case (5): cout << "Programm wird beendet.\n"; break;
     default: cout << "Falsche Eingabe\n"; break;
     }//switch
     }//while
     
     system("PAUSE");
     return 0;
    }//main
    
    
    
    
    void SpielfeldLoeschen()
    {
     for (int i=0; i < Hoehe; i++)
     for (int k=0; k < Breite; k++)
     Spielfeld[i][k].bBesetzt = false;
    }//SpielfeldLoeschen
    
    
    
    void SpielfeldAnzeigen()
    {
     //Verschachtelte Schleife um das Feld zu zeichen.
     for (int i=0; i < Hoehe; i++)
     {
     for (int k=0; k < Breite; k++)
     {
     if (Spielfeld[i][k].bBesetzt == false)
     cout << ". ";
     else
     cout << "X ";
     }
     cout << endl;
     }
     cout << endl;
    }//SpielfeldAnzeigen
    
    
    
    void SetzeFelddaten()
    {
     //Abfragen welches Feld
     int x,y;
     do{ cout << "x-Koordinate (1-10): ";
     cin >> x;
     } while (x < 1 || x > 10); // Um illegale Index-Angaben vom Array zu unterbinden
     
     do{ cout << "y-Koordinate (1-5): ";
     cin >> y;
     }while (y < 1 || y > 5); 
     
     //Name bestimmen
     cout << "Name: ";
     cin >> Spielfeld[x-1][y-1].chName; // x-1, y-1, um reelle Koordinaten zu schaffen, die bei 1 anfangen zu zählen - nicht bei 0
     Spielfeld[x-1][y-1].bBesetzt = true;
     cout << endl;
    }// SetzeFelddaten
    
    
    
    void ZeigeFelddaten()
    {
     //Abfragen welches Feld
     int x,y;
     do{ cout << "x-Koordinate (1-10): ";
     cin >> x;
     } while (x < 1 || x > 10);
    
     do{ cout << "y-Koordinate (1-5): ";
     cin >> y;
     }while (y < 1 || y > 5); 
     
     
     if (Spielfeld[x-1][y-1].bBesetzt == true)
     cout << "Name: " << Spielfeld[x-1][y-1].chName << endl << endl;
     else
     cout << "Gewaehltes Spielfeld ist nicht besetzt." << endl << endl;
    }//ZeigeFelddaten
    
     
  2. 24. Mai 2008
    AW: C++ Array füllt sich selbst 0.o

    Hey!

    Code:
    [...]
    
    const int Breite = 10;
    const int Hoehe = 5;
    [color="red"]S_FeldInfo Spielfeld[Breite][Hoehe];[/color]
    
    [...]
    
    void SpielfeldAnzeigen()
    {
     //Verschachtelte Schleife um das Feld zu zeichen.
    [color="red"] for (int i=0; i < Hoehe; i++)
     {
     for (int k=0; k < Breite; k++)
     {
     if (Spielfeld[i][k].bBesetzt == false)[/color]
     cout << ". ";
     else
     cout << "X ";
     }
     cout << endl;
     }
     cout << endl;
    }//SpielfeldAnzeigen
    
    [...]
    Richtig:
    Code:
    S_FeldInfo Spielfeld[Hoehe][Breite];
    Mfg,

    Kolazomai
     
  3. 24. Mai 2008
    AW: C++ Array füllt sich selbst 0.o

    hoppla

    halbe stunde suchen hat nichts gebracht, aber ich wusste hier findet jemand etwas

    dankeschön!! bw & closed
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.