Tic-Tac-Toe mit array's
-
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
-
ICH DEPP <--
Ich muss es über die Adresse aufrufen oder?
-
Hello World schrieb:
Ich muss es über die Adresse aufrufen oder?
Ja, ich glaube auch dann stimmt irgendetwas nicht ganz mit dem System, aber du weist ja jetzt woher der Fehler kommt.
void foo(int *p) { printf("%p - %i\n", p, *p); // Adresse, Wert *p += 1; // Dereferenzierung, funktioniert. // p += 1 // <- Ist böse, wenn p nicht auf ein Array zeigt. } int main() { int i = 5; foo(&i); foo(&i); }