Tic-Tac-Toe mit array's
-
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); }
-
So würde es ja auch perfekt funktionieren ... und wenn ich dann wieder alles umschreiben muss -.- gibt es da denn nicht auch i-eine andere Lösung?
weiter unten
-
Ich denke die Warnungen sind jetzt weg?
Und bei eingabe sind die gotos ÜBERFLÜSSIG! DAS GEHT ANDERS!
Zudem unterscheiden sich die beiden if Zweige nur durch 'X' und 'O'
Das kann man zusammen fassen.
-
1.)Ne es gibt noch warnings
2.)Ja ich weiß aber do,while mag mich nicht
3.)Egal ich habs hahlt für mich übersichtlicher gemacht ^^
4.)Die Warnings sind mir im Moment mehr oder weinger ******* egal
5.)Scheitere ich nun an einem PC-Gegner der sich beim 3. Zug immer aufhängt -.-#include <KÄÄÄÄÄSSSSEEEEEE.h>
EDIT: ok CPU_gegner funzt.... unentschieden kommt allerdings zu frü xD