Forum: PC-Programmierung mehrdimensionale Arrays an Funktionen Übergeben


von Ma B. (drumstick)


Lesenswert?

Hallo!

Ich benütze das Dev-C++, und bin auf das Spiel Schiffeversenken 
gestossen um mit mehrdimensionealen Arrays zu üben.

Das Übergeben an Funktionen ist mir noch nicht klar!


Arrays Spielfelder 10x10
1
char spieler1 = 'O';
2
char spieler2 = 'X';
3
4
char spfeply1[10][10];
5
char spfeply2[10][10];



Funktionen: spielfeld wird zur aktuallisierung des Spielfelds 
aufgerufen, entweder spfe 1 oder 2.

eingb: erfasst die startpositionen der Schiffe zuerst des Spieler1 dann 
2
1
void spielfeld(char);
2
char eingb(char, char);

1
char eingb(char sp, char spfe[][10])
2
{
3
spfe[row-1][colum-1] = sp;
4
spielfeld(spfe);
5
return 0;
6
}

main
1
int main()
2
{
3
4
 eingb(spieler1,  spfeply1);
5
 eingb(spieler2,  spfeply2);
6
}

Dies sind die relavent Codeausschnitte. In meinem Buch steht, dass für 
die erste Dimension keine Werte angeben werden müssen bei der Übergabe 
an Funktionen. Aber das Programm lässt sich nicht kompilieren!

Vielen Dank und freundliche Grüsse!

M.B.

von Gelöscht (kami89)


Lesenswert?

M. B. schrieb:
> Aber das Programm lässt sich nicht kompilieren!

Ich habe leider meine Glaskugel gerade nicht bei mir. Wenn du trotzdem 
eine Antwort haben willst, ohne bis zum Abend zu warten, musst du schon 
mit den Fehlermeldungen vom Compiler rausrücken.

Den ganzen Code wäre auch nicht schlecht, ich sehe nämlich Variablen die 
nirgens definiert wurden...

mfg

von Ma B. (drumstick)


Angehängte Dateien:

Lesenswert?

Sorry, war keine gute Idee nur dass allernötigste zu posten!

1
#include <stdio.h>
2
#include <stdlib.h>
3
4
#define X          'X'
5
#define O          'O'
6
#define clrscr()   system("cls")
7
#define LEER       ' '
8
9
int ply1s1[5] = {1, 1, 1, 1, 1}, ply1s2[3] = {1, 1, 1,},  ply1s3[2]= {1, 1}, ply2s1[5]= {1, 1, 1,1, 1, 1}, ply2s2[3]= {1, 1, 1,},  ply2s3[2]= {1, 1};
10
11
char spfeply1[10][10] = {{' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
12
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
13
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
14
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
15
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
16
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
17
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
18
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
19
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
20
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}};
21
                        
22
char spfeply2[10][10] = {{' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
23
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
24
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
25
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
26
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
27
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
28
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
29
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
30
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
31
                        {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}};
32
                        
33
int eingabe1 = 0, eingabe2 = 0;
34
char spieler1 = O;
35
char spieler2 = X;
36
int felder = 100;
37
38
void spielfeld(char spfe);
39
char eingb(char, char spfe[][10]);
40
char zug(char);
41
int win();
42
43
void spielfeld(char spfe)
44
{
45
     int i;
46
     clrscr();
47
     
48
     printf("     0   1   2   3   4   5   6   7   8   9\n   +---+---+---+---+---+---+---+---+---+---+\n");
49
     for(i = 0; i <= 9; i++)
50
     {
51
           printf("%d  | ", i);
52
           printf("%c",spfe[i][0] );
53
           printf(" | ");
54
           printf("%c",spfe[i][1] );
55
           printf(" | ");
56
           printf("%c",spfe[i][2] );
57
           printf(" | ");
58
           printf("%c",spfe[i][3] );
59
           printf(" | ");
60
           printf("%c",spfe[i][4] );
61
           printf(" | ");
62
           printf("%c",spfe[i][5] );
63
           printf(" | ");
64
           printf("%c",spfe[i][6] );
65
           printf(" | ");      
66
           printf("%c",spfe[i][7] );
67
           printf(" | ");
68
           printf("%c",spfe[i][8] );
69
           printf(" | ");
70
           printf("%c",spfe[i][9] );
71
           printf(" | \n");
72
           printf("   +---+---+---+---+---+---+---+---+---+---+\n");
73
           
74
     }
75
    
76
}
77
78
79
80
81
char eingb(char sp, char spfe[][10])
82
{
83
     unsigned int row, colum;
84
     char res;
85
     
86
     printf("Geben Sie die Zeile an, in dem Sie ein Schiff platzieren wollen fuer S1\t");     
87
     scanf("%d", &row);
88
     
89
     printf("\nGeben Sie die Spalte an, in der der Anfang des Schiffes S1 platziert wird\t");     
90
     scanf("%d", &colum);
91
     
92
     if(spfe[row-1][colum-1] == LEER)
93
     {
94
                                 int q;
95
                                 for(q = 0; q < 5; q++)
96
                                 {
97
                                       spfe[row-1][colum-1] = sp;
98
                                       spielfeld();
99
                                       colum += 1;
100
                                 } 
101
                                
102
     }
103
     else
104
     {
105
      printf("fehler");    
106
     }
107
     
108
     printf("Geben Sie die Zeile an, in dem Sie ein Schiff platzieren wollen fuer S2\t");     
109
     scanf("%d", &row);
110
     
111
     printf("\nGeben Sie die Spalte an, in der der Anfang des Schiffes S1 platziert wird\t");     
112
     scanf("%d", &colum);
113
     
114
     if(spfeply1[row-1][colum-1] == LEER)
115
     {
116
                                 int w;
117
                                 for(w = 0; w < 2; w++)
118
                                 {
119
                                       spfe[row-1][colum-1] = sp;
120
                                       spielfeld();
121
                                       colum += 1;
122
                                 } 
123
                                
124
     }
125
     else
126
     {
127
      printf("fehler");    
128
     }
129
     
130
     return sp;
131
132
}
133
134
135
int main()
136
{
137
138
 eingb(spieler1, spfeply1[][10]);
139
 eingb(spieler2, spfeply2[][10]);
140
141
142
  system("PAUSE");  
143
  return 0;
144
}

Folgende Meldungen erscheinen: -> Anhanh!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> ply2s1[5]= {1, 1, 1,1, 1, 1},

Zähl mal.

> void spielfeld(char spfe)

Das ist ein Zeichen, kein Array. Daher kann

> printf("%c",spfe[i][0] );

nichts sinnvolles ergeben.


Literaturhinweis:
Brian Kernighan & Dennis Ritchie, "Programmieren in C", 2. Ausgabe, 
Hanser-Verlag

von Ma B. (drumstick)


Lesenswert?

Danke!

Das mit den 1sen ist wohl reingerutscht und das Buch hätte heut im 
Briefkasten sein müssen!

Gruss!

M.B.

von Udo S. (urschmitt)


Lesenswert?

M. B. schrieb:
> Das mit den 1sen ist wohl reingerutscht

Aber anhand der Compilermeldung hättest du doch zumindest sehen müssen 
daß die Fehlermeldungen in einer komplett anderen Zeile beginnen als 
dein 2 dim Array.
Wichtig für alle Programmiersprachen VOR ALLEM FÜR C!:
Immer die Fehler von 'oben' beseitigen, manche Fehler führen zu 
seltsamen und verwirrenden Folgemeldungen im Code weiter unten.
Meist ist die erste Meldung die wichtigste.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.