c++ problem z if

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

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

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)