c++ problem z if

0

Dlaczego nawet jeśli japowalce >= 1 się zgadza to wyskakuje mi cout << "Dokopal Ci Menel, wstydz sie !\n"; ?
Jakieś pomysły?

 if(japowalce >= 1 or menelpowalce <=0 )


    cout << "Pokonales Menela. Gratulacje.";
    else
    cout << "Dokopal Ci Menel, wstydz sie !\n";
0

a spróbuj z dodatkowymi nawiasami, może kolejność działań jest inna niż ci się wydaje:

if((japowalce >= 1) or (menelpowalce <=0))
0

Dalej nic

0

Spróbuj po if i else dać {} i między nimi instrukcje do wykonania i zamiast pisać or pisz ¦¦ czyli pionowe kreski (pisze z telefonu dlatego więcej teraz nie pomogę). Pionowe czyli bez tych odstępów..ja po prostu nie mam tego znaku na telefonie, ale na pewno wiesz ocb ;)

0

Jeżeli to:

if(japowalce >= 1 || menelpowalce <=0 )
    cout << "Pokonales Menela. Gratulacje.";
else
    cout << "Dokopal Ci Menel, wstydz sie !\n";

wypisuje "Dokopal Ci Menel, wstydz sie !" tzn. , że japowalce jest mniejsze od 1 i menelpowalce jest większe od 0 - innej możliwości po prostu nie ma.

0

zamiast pisać or pisz ¦¦ czyli pionowe kreski

słowa and, or, not itp. są w standardzie C++ na równi z &&, || i !.

0

byku ale to jest nie możliwe bo mam pętle

while(menelpowalce<=0 or japowalce >=1);
0
#include <iostream>
using namespace std;
int main()
{
    int japowalce, menelpowalce=0;
    while(menelpowalce<=0 or japowalce >=1)
    {
        if(japowalce >= 1 || menelpowalce <=0 )
            cout << "Pokonales Menela. Gratulacje.";
        else
            cout << "Dokopal Ci Menel, wstydz sie !\n";
    }
} 

Sprawdziłem^^ Coś takiego się kompiluje, tak wyglądał program, na którym to wypróbowałem. Wypisuje się oczywiście "Pokonałeś menela". Nie widzę jednak sensu w tym kodzie. Jeśli warunek pętli nie będzie się zgadzał, to i else się nie wykona, bo pętla mu nie pozwoli. No i po kiego diabła masz tam postawiony na końcu pętli średnik (w programie, który próbowałem oczywiście go nie ma)?

0
Nortos napisał(a)

Dlaczego nawet jeśli japowalce >= 1 się zgadza to wyskakuje mi cout << "Dokopal Ci Menel, wstydz sie !\n"; ?
Jakieś pomysły?

Jesteś pewien, że "japowalce" jest większe lub równe 1? Sprawdziłeś debuggerem lub zwykłym printf()em, czy tylko Ci się wydaje, że musi być >=1?

0
Azarien napisał(a)

zamiast pisać or pisz ¦¦ czyli pionowe kreski

słowa and, or, not itp. są w standardzie C++ na równi z &&, || i !.

Owszem masz racje :) Ale niektóre kompilatory (starsze) mogą ich nie rozumieć. A nie wiesz jaki on ma kompilator :)
Co do autora tematu - spróbuj jeszcze dać klamry...po if{} i else {}.

0

@autor: daj cały kod tej pętli, bo tu nawet szklana kula nie pomoże. Na 100% warunek jest niespełniony, pewnie gdzieś jakieś obliczenia w tej Twojej pętli tak zmieniają zmienne, że if jest nie spełniony.

0

Nie śmiać się ! :D Jestem początkujący..
A tutaj funkcja z która sobie nie potrafię poradzić :< Próbowałem wszystkiego tak jak mówiliście ale niestety nic nie pomogło. Tak wiem, że to burdelowski kod ;x

  void menelek()
    {
        int menel;
        int rundy = 0;
        int atakmenela;
        int sumujciosymenela=0;
        int twojatak;
        int sumujmojeciosy=0;
        int hpmenela = 100;
        int twojehp = 150;
        int menelpowalce =0;
        int japowalce =0;
    cout << "[1] Menel - Atk:5, Def:0" << endl;
    cin >> menel;
    switch(menel)
    {case 1:
    do{
    atakmenela = ( rand() % 5 ) + 1;
    twojatak = ( rand() % 5 ) + 1;
    cout << "Ciosy , ktore otrzymales od Menela = " << atakmenela << "\n";
    cout << "Ciosy , ktore zadales Menelowi = " << twojatak << "\n";
    sumujmojeciosy += twojatak;
    rundy++;
    sumujciosymenela += atakmenela;
    rundy++;
    menelpowalce = sumujmojeciosy - hpmenela;
    japowalce = sumujciosymenela - twojehp;
    }while(menelpowalce<=0);
    cout << "\nCiosy, ktore zadal Ci Menel = " << sumujciosymenela << "\n";
    cout << "Ciosy, ktore zadales Menelowi = " << sumujmojeciosy << "\n";
   if((japowalce >= 1))
   cout << "Pokonales Menela. Gratulacje.";
    else
    cout << "Dokopal Ci Menel, wstydz sie !\n";

}

;system("PAUSE");
1

masz błąd w 2 linijkach:

menelpowalce = sumujmojeciosy - hpmenela;
japowalce = sumujciosymenela - twojehp;

japowalce będzie większe od 1 jeżeli suma otrzymanych ciosów będzie większa od twojehp(150)

menelpowalce = hpmenela - sumujmojeciosy;
japowalce = twojehp - sumujciosymenela;

Musisz jeszcze zmienić warunek w while

0

No teraz pisze , że pokonałem ale

    cout << "Ciosy , ktore otrzymales od Menela = " << atakmenela << "\n";
    cout << "Ciosy , ktore zadales Menelowi = " << twojatak << "\n";

Wykonuje się tylko raz, a powinno aż do pokonania menela (100hp).

0

Bo warunek w while powinien być

}while(menelpowalce>0);

Być może ten błąd to jakaś pozostałość z Pascala (repeat-until) :D

0

Nie działa, bo masz te dwa teksty poza pętlą.
PS
Przed przecinkiem nie stawiamy spacji.

0

Chodzi o to?

   if((japowalce >= 1))
   cout << "Pokonales Menela. Gratulacje.";
    else
    cout << "Dokopal Ci Menel, wstydz sie !\n";
0

O to:

    cout << "Ciosy , ktore otrzymales od Menela = " << atakmenela << "\n";
    cout << "Ciosy , ktore zadales Menelowi = " << twojatak << "\n"; 
0

Przyjrzyj się kolego ..

  cout << "Ciosy , ktore otrzymales od Menela = " << atakmenela << "\n";
    cout << "Ciosy , ktore zadales Menelowi = " << twojatak << "\n";
    sumujmojeciosy += twojatak;
    rundy++;
    sumujciosymenela += atakmenela;
    rundy++;
    menelpowalce = sumujmojeciosy - hpmenela;
    japowalce = sumujciosymenela - twojehp;
    }
0

A czy zamiast

menelpowalce = sumujmojeciosy - hpmenela;
japowalce = sumujciosymenela - twojehp;

nie powinno być

menelpowalce = hpmenela - sumujmojeciosy;
japowalce = twojehp - sumujciosymenela;

W końcu powinniśmy zadane obrażenia odejmować od stanu zdrowia a nie na odwrót.

EDIT@ Ehh nie zwróciłem uwagi na kilka postów wyżej, to samo rozwiązanie. Mój błąd

1

Powinno być chyba:

} while((menelpowalce > 0) && (japowalce > 0));

0

Działa , dzięki.
Temat do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1