Abfrageproblem bei Schiffe verwenken

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!!