Tic-Tac-Toe mit array's
-
ok
@SeppJ ja ja ... ist okey
@DirkB Danke
So ich verstehe das in Zeile 77 nicht was dieses Warning von mir will?#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <windows.h> #define Z 3 #define S 3 void programStart(); void zeichneFeld(char feld[3][3], int n, int s); void eingabe(char feld[3][3],char zeile, int spalte); int pruefeEingabe(char zeile, int spalte); int main() { char feld[3][3] = {{0}}; int n=0,s=0; int spalte=1; char zeile='A'; programStart(); printf(" 1 2 3 \n"); printf(" |---|---|---|\n"); printf(" A | | | |\n"); printf(" B | | | |\n"); printf(" C | | | |\n"); printf(" |---|---|---|\n"); printf("Noch keine Spielzuege vorhanden!\n"); eingabe(feld,zeile,spalte); zeichneFeld(feld,n,s); system("PAUSE"); return 0; } void programStart() { printf("Herzlich Willkomen bei Tic-Tac-Toe!\n\n" "Der Spieler X beginnt, Die Eingabe erfolgt im Format\n" "ZeileSpalte, z.B.: B2!\nWenn sie soweit sind kann das Spiel beginnen!\n\n"); system("PAUSE"); system("cls"); } void zeichneFeld(char feld[3][3], int n, int s) { printf(" 1 2 3 \n"); printf(" |---|---|---|\n"); printf(" A |%d |%d |%d |\n",feld[n][s],feld[n][s],feld[n][s]); printf(" B |%d |%d |%d |\n",feld[n][s],feld[n][s],feld[n][s]); printf(" C |%d |%d |%d |\n",feld[n][s],feld[n][s],feld[n][s]); printf(" |---|---|---|\n"); } void eingabe(char feld[3][3],char zeile, int spalte) { char enter[3], dummy; int ok; printf("Spieler X Ihre Eingabe -> "); gets(enter); ok=sscanf(enter,"%c%d%c",&zeile,&spalte,&dummy); printf("%c%d\n",zeile,spalte); if(zeile=='A') zeile=0; if(zeile=='B') zeile=1; if(zeile=='C') zeile=2; spalte=-1; feld[zeile][spalte]='X'; system("PAUSE"); } int pruefeEingabe(char zeile, int spalte) { if(zeile>='A'&&zeile<='C'&&spalte>=1&&spalte<=3) return 0; else return 1; }
EDIT: ist doch eigentlich eine korrekte zuweisung oder?
-
Du hast ja jetzt einiges geändert.
Wie lautet denn jetzt die Warnung?
-
So jz läufts .... hab aber immer noch 1 Warning
75: Array subscribed has type 'char'
Quellcode:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <windows.h> #define Z 3 #define S 3 void programStart(); void zeichneFeld(char feld[3][3], int n, int s); void eingabe(char feld[3][3],char zeile, int spalte); int pruefeEingabe(char zeile, int spalte); int main() { char feld[3][3] = {{0}}; int n=0,s=0; int spalte=1; char zeile='A'; programStart(); printf(" 1 2 3 \n"); printf(" |---|---|---|\n"); printf(" A | | | |\n"); printf(" B | | | |\n"); printf(" C | | | |\n"); printf(" |---|---|---|\n"); printf("Noch keine Spielzuege vorhanden!\n"); eingabe(feld,zeile,spalte); zeichneFeld(feld,n,s); eingabe(feld,zeile,spalte); zeichneFeld(feld,n,s); system("PAUSE"); return 0; } void programStart() { printf("Herzlich Willkomen bei Tic-Tac-Toe!\n\n" "Der Spieler X beginnt, Die Eingabe erfolgt im Format\n" "ZeileSpalte, z.B.: B2!\nWenn sie soweit sind kann das Spiel beginnen!\n\n"); system("PAUSE"); system("cls"); } void zeichneFeld(char feld[3][3], int n, int s) { printf(" 1 2 3 \n"); printf(" |---|---|---|\n"); printf(" A | %c | %c | %c |\n",feld[0][0],feld[0][1],feld[0][2]); printf(" B | %c | %c | %c |\n",feld[1][0],feld[1][1],feld[1][2]); printf(" C | %c | %c | %c |\n",feld[2][0],feld[2][1],feld[2][2]); printf(" |---|---|---|\n"); } void eingabe(char feld[3][3],char zeile, int spalte) { char enter[3], dummy; int ok; printf("Spieler X Ihre Eingabe -> "); gets(enter); ok=sscanf(enter,"%c%d%c",&zeile,&spalte,&dummy); if(zeile=='A') zeile=0; if(zeile=='B') zeile=1; if(zeile=='C') zeile=2; spalte-=1; feld[zeile][spalte]='X'; system("cls"); } int pruefeEingabe(char zeile, int spalte) { if(zeile>='A'&&zeile<='C'&&spalte>=1&&spalte<=3) return 0; else return 1; }
-
Der Compiler möchte dich darauf aufmerksam machen, dass du ohne die Zeilen 68-73 sterben würdest.
-
Gut ist logisch, aber wie bekomm ich den Warning weg?
-
Hello World_unreg schrieb:
Gut ist logisch, aber wie bekomm ich den Warning weg?
Ersetz den ganzen Block durch:
ok=sscanf(enter,"%c%d%c",&zeile,&spalte,&dummy); feld[zeile - 'A'][spalte - 1]='X';
Und außerdem: Wozu ist dummy gut? Wozu ist enter gut? Warum prüfst du ok nicht?
edit: Jaja, ganz genau genommen ist das nicht portabel, da 'B' und 'C' nicht auf 'A' folgen müssen. Dann kann man das Spiel eben nicht auf einem System mit EBCDIC-Zeichensatz spielen.
-
int als Arrayindex findet der Compiler besser.
void eingabe(char feld[3][3],[b]int [/b]zeile, int spalte)
Zeichen (Buchstaben) passen auch in ein int.
-
SeppJ schrieb:
Dann kann man das Spiel eben nicht auf einem System mit EBCDIC-Zeichensatz spielen.
Warum nicht? Zumindest A-I sind fortlaufend bei EBCDIC.
-
Das heißt?
-
-
Ok das wäre nicht gut
Aber wie kann ich diesen Warning beheben .... da er führ mich logisch erscheint -.-'
-
Habe ich um 15:45:26 geschrieben.
-
DirkB schrieb:
Habe ich um 15:45:26 geschrieben.
Ja wie grieg ich den jz weg?
-
Du hast jetzt schon zwei gute Antworten dazu bekommen. Einmal meine (die auch auf EBCDIC funktioniert, dessen Zeichentabelle ich nicht komplett auswendig kenne
) und die von DirkB. Bitte lies sie, sonst verlieren Helfer das Interesse.
-
Mann, Mann, Mann.
DirkB schrieb:
int als Arrayindex findet der Compiler besser.
Heißt: Der Compiler hätte als Arrayindex lieber ein int statt eines char.
Da schauen wir mal in deine Funktion rein:
void eingabe(char feld[3][3],char zeile, int spalte) { ... feld[zeile][spalte]='X'; system("cls"); }
und sehen: hoppla, der Index für zeile ist ja vom Typ char.
Was kann man da machen? (achte auf das fett gedruckte)
DirkB schrieb:
void eingabe(char feld[3][3],[b]int [/b]zeile, int spalte)
denn:
DirkB schrieb:
Zeichen (Buchstaben) passen auch in ein int.
oder du castest zeile nach int. Dann ist der Compiler auch ruhig.
Deinen Hintern wisch ich jetzt aber nicht ab.
-
OKEY OKEY OKEY
Danke, Ich weiß ich bin etwas begriffsstützig
Danke für eure Hilfe
-
ok so weit so gut ... 0 warnings .... nur schreibt er mir bei int alles auf [0][0] -.-'
-
cooky451 schrieb:
cooky451 schrieb:
Sollten sich die Werte der Variablen die in der main() deklariert wurden irgendwann mal ändern?
-
cooky451 schrieb:
cooky451 schrieb:
cooky451 schrieb:
Sollten sich die Werte der Variablen die in der main() deklariert wurden irgendwann mal ändern?
JA! ??? tun sie auch o.O
-
Hello World schrieb:
JA! ??? tun sie auch o.O
Aha, echt? Wo genau? Insbesondere den Wert von "spalte" würde ich mal beobachten