Du bist nicht angemeldet.

Werbeanzeige

1

03.12.2016, 17:17

Problem mit Listing 5.8

Hallo. Ich bin neu hier und arbeite mich gerade durch das Buch von Heiko Kallista.
Beim Listing 5.8 habe ich nun folgendes Problem. Es gibt zwar keine Fehler aber das Programm macht nicht dass, was es soll. Ich möchte ja über die Funktion BesetzeFeld() , einzelne Werte umschreiben.
Leider gibt mir der Compiler das nicht richtig aus. Ich habe immer eine Ausgabe ,wo alle Werte mit "."
gesetzt sind.
Also in dieser Form:

.....
.....
.....
.....
.....




Hat jemand eine Idee was ich anders machen muss?


Hier mal der Quelltext:

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Mannometer« (03.12.2016, 17:36)


2

03.12.2016, 17:24

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
// Info : Hier können die Funktionen auf die Struktur zugreifen,da sie global definiert ist 

#include <iostream>

using namespace std;


//Variablen und Konstanten
const int Breite = 5;
const int Hoehe = 5;

//Strukturen
struct S_FeldInfo
{
    bool Besetzt;
    char Name[30];
    
};


void LoescheSpielfeld();
void ZeigeSpielfeld();
void ZeigeFelddaten();
void BesetzeFeld();



//Instanz eines Spielfeldes anlegen
S_FeldInfo S_Spielfeld[Breite][Hoehe];

//Prototypen


int main()
{
    int Auswahl = 0;
    
    //LoescheSpielfeld(); // Spielfeld initialisieren

    // Menue anzeigen und Eingabe bearbeiten
    do 
    {
        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 beenden" << endl;
        cout << "Auswahl : ";
        cin >> Auswahl;

        switch(Auswahl)
        {
            //Spielfeld anzeigen?
            case(1):
            {
                ZeigeSpielfeld();
            }break;

            //Feld besetzen?
            case(2):
            {
                BesetzeFeld();
            }break;

            //Felddaten anzeigen
            case(3):
            {
                ZeigeFelddaten();
            }break;

            //Spielfeld loeschen
            case(4):
            {
                LoescheSpielfeld();
                cout << "Spielfeld wurde geloescht!" << endl;
            }break;

            //Programm beenden?
            case(5):
            {
                cout << "Programm beendet." << endl;
            }break;

            // Falsche Eingabe?
            default:
            {
                cout << "Ungueltiger Menuepunkt! " << endl;
            }


        }

    } while (Auswahl != 5);

    return 0;
}


//Lösche Spielfeld

void LoescheSpielfeld()
{
    for (int y = 0; y < Hoehe; y++)
    {
        for (int x = 0; x < Breite;x++)
        {
            S_Spielfeld[Breite][Hoehe].Besetzt = false;
        }
    }

}

void ZeigeSpielfeld()
{
    cout << endl;

    for (int y = 0; y < Hoehe; y++)
    {
        for (int x = 0; x < Breite; x++)
        {
            if (S_Spielfeld[Breite][Hoehe].Besetzt == true)
            {
                cout << "X";
            }
            if (S_Spielfeld[Breite][Hoehe].Besetzt == false)
            {
                cout << ".";
            }
        }
        cout << endl;
    } 
}

void ZeigeFelddaten()
{

}

void BesetzeFeld()
{
    int Wert = 0;
    int Wert1 = 0;
    int Wert2 = 0;
    

    do
    {
        cout << "Wert 1 : \n";
        cin >> Wert;
    } while (Wert1 > Breite || Wert1 < 0);

    Wert1 = Wert;

    do
    {
        cout << "Wert 2 : \n";
        cin >> Wert;
    } while (Wert2 > Hoehe || Wert2 < 0);

    Wert2 = Wert;

    S_Spielfeld[Wert1][Wert2].Besetzt =  true ;


}

BlueCobold

Community-Fossil

Beiträge: 10 153

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

03.12.2016, 21:48

Tipp: Denk mal drüber nach welches Feld genau hier gemeint ist: S_Spielfeld[Breite][Hoehe]. Dann kommst du vielleicht drauf, was du falsch gemacht hast.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

4

03.12.2016, 22:50

Danke für den Tipp, aber ich komm nicht drauf. Keine Ahnung.
Bei der Funktion LoescheSpielfeld() klappt das ja auch und da setzt er mir auch
meine Werte... ?(

5

03.12.2016, 22:58

Bin grade drauf gekommen ; S_Spielfeld[x][y].Besetzt muss da natürlich stehen. jetzt setzt er mir auch die werte.

Werbeanzeige