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

[c++] Warunki logiczne && oraz || nie działają mi w VS 2015

Ostatnio zmodyfikowano 2016-05-02 02:30
Autor Wiadomość
Przemek1980
Temat założony przez niniejszego użytkownika
[c++] Warunki logiczne && oraz || nie działają mi w VS 2015
» 2016-05-02 02:30:38
Witam !!!

Na wstępie pragnę nadmienić że dopiero zaczynam przygodę z C++, robię sobie grzecznie kurs i nagle natrafiam na problem typu : przepisuję kod znak w znak z ekranu (kurs wideo) i działa on inaczej niż powinien.

aplikacja to prosta gra w kółko i krzyżyk. Problem pojawia się przy sprawdzeniu czy ktoś już wygrał. Funkcja która powinna pokazać meesageboxa po wygranej pokazuje go po pierwszym kliknięciu w cokolwiek. Tutaj kod odpowiedzialny za 'problem'

niema żadnego problemu z kodem jak wyremuje sprawdzanie warunków. sprawdziałem też 3 razy nazwy pictureboxow

C/C++
bool wygrana = false;
bool wcisniety = true;

.....

private: System::Void graj( System::Object ^ sender, System::EventArgs ^ e ) {
   
    PictureBox ^ zdjecie =( PictureBox ^ ) sender;
   
    if( wcisniety )
    {
        zdjecie->Image = imageList1->Images[ 1 ];
        zdjecie->Tag = "X";
    }
    else
    {
        zdjecie->Image = imageList1->Images[ 0 ];
        zdjecie->Tag = "O";
    }
   
    wcisniety = !wcisniety;
    zdjecie->Enabled = false;
    wynik(); //wywołanie funkcji sprawdzania wyniku
   
}

private: Void wynik()
{
   
    //sprawdzenie wygranej w poziomie
    if(( a1->Tag == b1->Tag ) &&( b1->Tag == c1->Tag ) &&( a1->Tag != '?' ) ) wygrana = true;
   
    if(( a2->Tag == b2->Tag ) &&( b2->Tag == c2->Tag ) &&( a2->Tag != '?' ) ) wygrana = true;
   
    if(( a3->Tag == b3->Tag ) &&( b3->Tag == c3->Tag ) &&( a3->Tag != '?' ) ) wygrana = true;
   
   
    //sprawdzenie wygranej w pionie
    if(( a1->Tag == a2->Tag ) &&( a2->Tag == a3->Tag ) &&( a1->Tag != '?' ) ) wygrana = true;
   
    if(( b1->Tag == b2->Tag ) &&( b2->Tag == b3->Tag ) &&( b1->Tag != '?' ) ) wygrana = true;
   
    if(( c1->Tag == c2->Tag ) &&( c2->Tag == c3->Tag ) &&( c1->Tag != '?' ) ) wygrana = true;
   
   
    //sprawdzenie wygranej po skosie
    if(( a1->Tag == b2->Tag ) &&( b2->Tag == c3->Tag ) &&( a1->Tag != '?' ) ) wygrana = true;
   
    if(( c1->Tag == b2->Tag ) &&( b2->Tag == a3->Tag ) &&( c1->Tag != '?' ) ) wygrana = true;
   
    if( wygrana )
    {
        MessageBox::Show( "wygrana", L"Kółko i Krzyżyk", MessageBoxButtons::OK, MessageBoxIcon::Asterisk );
    }
}
w skrócie

ABC to kolumny 123 to wiersze mam wiec 9 picture boxów które po kliknięciu są tagowane X lub O. przed kliknięciem posiadają Tag='?'
według mnie powinno działać na kursie działa ale tam jest VS2013 ja mam VS2015. Gdy kompiluje source z  kursu VS piszczy ze musi cos pozmieniac ze względu na zgodnosc i wtedy...... to działa... a jak mam krok w krok to samo wklepane w vs2015 to pokazuje mi message boxa po kliknięci w dowolny picturebox tak jakby ignorował całkowicie warunek && a raczej traktował go jak ||.

zamkniece messageboxa i ponowne kliknięcie znowu wywołuyje wiadomosc o wygranej.

z góry dziękuję za pomoc


EDIT !!!!!!!!!!!!!!!!

no i po problemie :) z góry przepraszam za zamęt. Błąd leżał po mojej stronie -> użyłem błędnie apostrofu zamiast cudzysłowa w miejscu

(c1->Tag != '?') kompilator nie wywalał błędu ale warunek był spełniany po kliknięciu w cokolwiek.

Pozdrawiam
P-147865
« 1 »
  Strona 1 z 1