Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zmienna Enum jako argument kończący pętlę do...while

Ostatnio zmodyfikowano 2014-03-19 19:42
Autor Wiadomość
Noweli
Temat założony przez niniejszego użytkownika
Zmienna Enum jako argument kończący pętlę do...while
» 2014-03-19 19:17:13
Witam. Postanowiłem że wraz ze swoim jak na razie ubogim zasobem wiedzy o C++ napiszę prymitywną wersję gry KÓŁKO I KRZYŻYK. Mój problem dotyczy zmiennej Enum. Otóż gdy zostanie spełniony warunek IF'a który następnie za pomącą return zwraca wartość GL_WIN do zmiennej GameS to takowa wartość nijak wpływa na pętlę do...while, która zgodnie z moimi oczekiwaniami powinna zakończyć zapętlanie.



Head.cpp:
C/C++
int main()
{
    GSTATE GameS = GS_GAMEON;
   
    do
    {
        //kilka linijek nieistotnego kodu
        GameS = CheckGameState( GameMap );
       
    } while( GameS != GS_WIN || GameS != GS_DRAW );
   
}


Functions.h:
C/C++
enum GSTATE { GS_WIN, GS_DRAW, GS_GAMEON };
GSTATE CheckGameState( char( & gmap )[ 3 ][ 3 ] )
{
    int hcounter = 0;
    int ucounter = 0;
    for( int i = 0; i < 3; i++ )
    {
        for( int j = 0; j < 3; j++ )
        {
            if( gmap[ i ][ j ] == 'x' || gmap[ i ][ j ] == 'o' ) hcounter++;
           
        }
        //if(gmap[i][] == 'x' || gmap[i][] == 'o') ucounter++;
        if( hcounter == 3 ) return GS_WIN;
        else hcounter = 0;
       
    }
    if( ucounter == 3 ) return GS_WIN;
    else ucounter = 0;
   
}
P-106800
alixir
» 2014-03-19 19:42:27
Problemem nie jest wartość enum, a warunek
while( GameS != GS_WIN || GameS != GS_DRAW );
Jeśli GameS=GS_WIN, to druga część warunku jest prawdziwa, a tym samym cały warunek jest prawdziwy, i pętla się nie kończy.

Możesz zmienić go na:
while( !( GameS == GS_WIN || GameS == GS_DRAW ) );

P-106803
« 1 »
  Strona 1 z 1