Hey Leute,
ich bin gerade dabei Schiffe versenken in C zu programmieren. Mittlerweile bin ich an den Punkt angekommen die Schüsse ab zu fragen. Ich habe ein Feld initialisiert indem anschließend die Schiffe gesetzt werden. Anschließend habe ich ein zweites Feld initialisert auf den die Schüsse angezeigt werden soll.
Zur abfrage habe ich mir fogendes gedacht:
if (feld[posx-64][posy+1] = ‚#‘)
a_feld[posx-64][posy+1] = ‚x‘;
else
a_feld[posx-64][posy+1] = ‚o‘;
gotoxy(posx+25-64,posy+10+1);
printf("%c",a_feld[posx-64][posy+1]);
leider haut das nicht so ganz hin, da das programm mir immer ein ‚x‘ ausgibt auch wenn kein Schiff (’#’) im entsprechenden Feld steht.
nun die einfache Frage: was mach ich falsch?
ich würde mich sehr über eure Hilfe freuen!!
MFG
Hallo Student90 !
Das ist ein einfacher Anfängerfehler:
Vergleichsoperator auf Gleichheit ist in C/C++ nicht ‚=‘ sondern ‚==‘ !
‚=‘ ist der Zuweisungsoperator, und das Ergebnis einer Zuweisung ist immer der zugewiesene Wert.
Daher wird in
if (feld[posx-64][posy+1] = '#')
als Ergebnis ‚#‘ geliefert, ‚#‘ ist ‚35‘, das ist ungleich 0, also true (in C/C++ ist ‚0‘ gleich false, alles ungleich ‚0‘ true).
Du fällst also immer in den ersten if-Zweig.
(Da hätte eigentlich ein Warning des Compilers kommen sollen, schau einmal die Compilerausgaben bzw. -Einstellungen an.)
Korrekt muss es also heissen:
if (feld[posx-64][posy+1] == '#')
mfg
Christof
Christof,
vollkommen richtig. Damit man auch unabhaengig vom Compiler eine Fehlermeldung bekommt, schreibt der professionelle C/C++ Entwickler diesen Vergleich auch in der Regel wie folgt:
if ('#' == feld[posx-64][posy+1])
also den konstanten Ausdruck nach links.
Sollte man hier das eine „=“ vergessen haben, so _muss_ der Compiler eine Fehlermeldung ausgeben.
Gruss
norsemanna
habt herzlichen dank ihr beiden!!