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.
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
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!
> 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
Danke!
Das mit den 1sen ist wohl reingerutscht und das Buch hätte heut im
Briefkasten sein müssen!
Gruss!
M.B.
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.
|