c++ problem z if

NO
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 13 lat
  • Postów:10
0

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

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


    cout << "Pokonales Menela. Gratulacje.";
    else
    cout << "Dokopal Ci Menel, wstydz sie !\n";
edytowany 1x, ostatnio: madmike
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 16 godzin
0

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

Kopiuj
if((japowalce >= 1) or (menelpowalce <=0))
NO
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 13 lat
  • Postów:10
0

Dalej nic

allocer
if((japowalce >= 1)|| (menelpowalce <=0))
tomepaw
allocer - w c++ można zamiennie stosować || lub or i && lub and, tak dla sprostowania :P
DZ
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 10 lat
  • Postów:66
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 ;)


Programista uczy się całe życie....
edytowany 1x, ostatnio: Dr Zielu
NO
Nie działa nadal
byku_guzio
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 7 lat
0

Jeżeli to:

Kopiuj
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.


edytowany 1x, ostatnio: byku_guzio
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 16 godzin
0

zamiast pisać or pisz ¦¦ czyli pionowe kreski

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

NO
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 13 lat
  • Postów:10
0

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

Kopiuj
while(menelpowalce<=0 or japowalce >=1);
Patryk27
Takie coś się kompiluje? Jakim prawem?
byku_guzio
Normalnym, to jest poprawny zapis
FI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 13 lat
  • Postów:9
0
Kopiuj
#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)?

edytowany 3x, ostatnio: Filar
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?

FI
Jeśli rzeczywiście zastosował te instrukcje warunkowe w pętli, o której napisał, to gdyby japowalce było mniejsze od 1, program niczego by nie wypisał.
DZ
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 10 lat
  • Postów:66
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 {}.


Programista uczy się całe życie....
edytowany 1x, ostatnio: Dr Zielu
byku_guzio
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 7 lat
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.


NO
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 13 lat
  • Postów:10
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

Kopiuj
  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");
FI
Straszny syf w kodzie... Nie powinieneś zwięźlać kodu kosztem jego czytelności.
byku_guzio
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 7 lat
1

masz błąd w 2 linijkach:

Kopiuj
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)

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

Musisz jeszcze zmienić warunek w while


edytowany 1x, ostatnio: byku_guzio
NO
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 13 lat
  • Postów:10
0

No teraz pisze , że pokonałem ale

Kopiuj
    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).

MX
  • Rejestracja:około 17 lat
  • Ostatnio:prawie 13 lat
0

Bo warunek w while powinien być

Kopiuj
}while(menelpowalce>0);

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


Not Found
The requested URL /wypasiona_sygnaturka.txt was not found in this brain.
-----
Human/1.0.00 (Earth) Server at Poland Port 65535
NO
Nic to nie pomogło.
FI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 13 lat
  • Postów:9
0

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

edytowany 1x, ostatnio: Filar
NO
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 13 lat
  • Postów:10
0

Chodzi o to?

Kopiuj
   if((japowalce >= 1))
   cout << "Pokonales Menela. Gratulacje.";
    else
    cout << "Dokopal Ci Menel, wstydz sie !\n";
FI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 13 lat
  • Postów:9
0

O to:

Kopiuj
    cout << "Ciosy , ktore otrzymales od Menela = " << atakmenela << "\n";
    cout << "Ciosy , ktore zadales Menelowi = " << twojatak << "\n"; 
NO
Przecież to jest w pętli :O
FI
W każdej pętli blok kończy się takim znakiem: '}', a jak widać teksty następują po nim.
NO
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 13 lat
  • Postów:10
0

Przyjrzyj się kolego ..

Kopiuj
  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;
    }
FI
Przepraszam, te dwa teksty są bliźniaczo podobne do tych pod pętlą, pomyliłem się.
tomepaw
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Lublin
  • Postów:218
0

A czy zamiast

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

nie powinno być

Kopiuj
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

edytowany 1x, ostatnio: tomepaw
1

Powinno być chyba:

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

NO
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 13 lat
  • Postów:10
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.