• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Operatory logiczne lub || i i &&

Object Storage Arubacloud
0 głosów
454 wizyt
pytanie zadane 12 stycznia 2019 w C i C++ przez mrKaczorrro13 Użytkownik (560 p.)

Witam,

Mam problem z podanym kodem. Mianowicie nie rozumiem czemu nie dziala mi operator logiczny "lub" w petli while? Z tego co rozumiem, petla powinna sie wykonywac do momentu az nie wprowadze na klawiaturze "q" lub "Q". Niestety wychodzi na to ze jestem w bledzie. Co gorsza, i totalnie nie rozumiem czemu, kiedy zamienie operator "lub-||" na operator "i-&&", petla dziala jak nalezy. 

Druga rzecz ktorej nie rozumiem, to czemu po wprowadzeniu na klawiatorze komputera jednej z podanych liter A, B, C lub D, wyswietla mi sie ponownie metoda "showmenu" z tym, że podwójnie. Wedlug mojego toku rozumowania (ktory jest bledny jak widac) metoda ta powinna sie wyswietlic tylko raz, a przynajmniej tak bym chcial;p

Bardzo bym prosil o pomoc lub chociaz wskazowe. Z gory wielkie dzieki!

#include <iostream>
using namespace std;
void showmenu();    //prototyp funkcji.

int main()
{
    showmenu();
    char choice;
    cin.get(choice);
    while((choice!=('q')) && (choice!=('Q')))
    {
        switch(choice)
        {
        case 'a':
        case 'A':
            cout<<"Mount Everest (8848m n.p.m.)\n";
            break;
        case 'b':
        case 'B':
            cout<<"Urodzony w 15.08.1769r.(Korsyka). Zmarl w 5.05.1821r.(Wyspa Św. Heleny)\n";
            break;
        case 'c':
        case 'C':
            cout<<"Upadek Cesarstwa Zachodniorzymskiego po rozbiorach: 476r.\n";
            break;
        case 'd':
        case 'D':
            cout<<"Jozef Kukuczka- wszystkie 14 glownych szczytow o wysokosci ponad 8 tysiecy metrow.\n";
            break;
        }
        showmenu();
        cin.get(choice);
    }
    return 0;
}
void showmenu()
{
    cout<<"\nO ktorej ciekawostce chcesz sie dowiedziec?\n\n"
        "A) Najwieksza gora swiata.       B)Rok urodzenia i smierci Napoleona Bonaparte.\n"
        "C) Upadek Cesarstwa Rzymskiego.  C)Polski zdobywca korony Himalajow i Karakurum.\n"
        "Q) Zakoncz.\n";
}

 

2 odpowiedzi

+1 głos
odpowiedź 12 stycznia 2019 przez RafalS VIP (122,820 p.)
wybrane 13 stycznia 2019 przez mrKaczorrro13
 
Najlepsza

Co do problemów z wczytywaniem to nie wiem czemu używasz cin.get, zamiast użyć czegoś bardziej wysokopoziomowego:

cin >> choice;

ignoruje białe znaki i po problemie.

(choice!=('q')) && (choice!=('Q'))

Wszystkie nawiasy są zbędne:

choice!='q' && choice!='Q'

A nie działa z lub, bo choice != 'q' jest prawdziwe dla wszystkiego poza 'q' w tym 'Q'. True lub cokolwiek zawsze daje true. Więc program nawet nie musi sprawdzać kolejnych wyrażeń jeśli lewa strona operatora lub jest prawdziwa. Oznacza to, że kolejny warunek będzie sprawdzony tylko jeśli choice=='q', co nie ma sensu. Wiecej tutaj.

0 głosów
odpowiedź 12 stycznia 2019 przez mrKaczorrro13 Użytkownik (560 p.)
Okej, wlasnie mnie olsnilo czemu metoda "showmenu()" wyswietla sie dwa razy;p

O ile sie nie myle, to dzieje sie tak poniewaz funkcja cin.get() wczytuje dane z klawiatury bez ostatniego znaku nowego wiersza, tak?

Rozwiazalem to dodajac .get() na koncu cin.get(choice).

 cin.get(choice).get();

Podobne pytania

0 głosów
1 odpowiedź 931 wizyt
pytanie zadane 14 marca 2016 w Systemy operacyjne, programy przez Akdx Początkujący (310 p.)
0 głosów
2 odpowiedzi 150 wizyt
pytanie zadane 11 listopada 2015 w C i C++ przez Kapi2222 Obywatel (1,220 p.)
0 głosów
1 odpowiedź 119 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...