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

bool /warunek wielokrotnego wyboru switch/początkujący

Object Storage Arubacloud
0 głosów
506 wizyt
pytanie zadane 21 listopada 2016 w C i C++ przez mcsobieski00 Nowicjusz (220 p.)
witam jestem bardzo początkującym programistą i próbowałem używać warunku wielokrotnego wyboru "switch" ze zmienną w formacie bool i jak pisałem case true to wszystko fajnie działa komiluje ale kiedy w drugim case wpisałem false / fail to wywalało mi błąd więc zamieniłem drugi case na default co z tego co wiem oznacza coś w stylu " inaczej" kiedyś tego użyłem i działało a teraz mam z tym problem inie wiem czy to wina zmiennej czy moja

1 odpowiedź

+1 głos
odpowiedź 21 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
wybrane 21 listopada 2016 przez mcsobieski00
 
Najlepsza
Warunku wielokrotnego wyboru możesz używać do zmiennych typu int lub char. Bool bardziej pasuje do instrukcji warunkowej if ... else.
komentarz 21 listopada 2016 przez mcsobieski00 Nowicjusz (220 p.)
dzienki sprawdzę
komentarz 21 listopada 2016 przez mcsobieski00 Nowicjusz (220 p.)
no dobra wszystko jest ok kompilator działa program odpala ale kiedy próbuje zapisać wartość do zmiennej bool jakby przestawał działać w sensie nie wywala go ani nic tylko poprostu nie robi nic dalej to fragment kodu :

#include <iostream>
#include <cstdlib>
#include <ctime>

int problem(int liczba);

int main()
{

    int liczba;
    std::cout << "Podaj liczbe: "<<std::endl;
    std::cin>>liczba;
    std::cout<<"Podales liczbe: "<<problem(liczba)<<std::endl;
    return 0;
}
int problem(int liczba)
{
bool z, y;
std::cout<<"twoja liczba to "<<liczba<<std::endl;{
std::cout<<std::cin.good();
std::cin>>z;
if (z == false)
{
    std::cout<<"coś poszło nie tak"<<std::endl<<"wywalam program";
    return 0;
}
std::cout<<std::cin.fail();
std::cin>>y;
if (y == true)
{
    std::cout<<"coś poszło nie tak"<<std::endl<<"wywalam program";
    return 0;
}

 

a to jest w konsoli :

podaj liczbe:

7

twoja liczba to 7

1

i tu jest koniec tego co chce mi powiedzieć komputer
komentarz 21 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
Po pierwsze: jeśli przesyłasz kod użyj do tego narzędzia do wpisywania kodu - taka mała ikonka z literami "code", gdzie będziesz mógł wybrać język w którym podajesz kod - popraw, a będzie nam się lepiej rozmawiało.

Po drugie: w chwili gdy wczytujesz liczbę i wywołujesz funkcję problem() sprawdzasz czy to co jest wpisane nie zwraca błędu - stąd ta jedynka.

Następnie twój program czeka na wpisanie zmiennej typu bool - jesli wpiszesz 0 będzie oznaczało false, jeśli jakąkolwiek wartość różną od zera będzie ona potraktowana jako true.

Czy próbowałeś coś wpisywać?

Edit: W drugiej linijce funkcji problem chyba niepotrzebnie otwierasz klamrę "{".
komentarz 21 listopada 2016 przez mcsobieski00 Nowicjusz (220 p.)
edycja 21 listopada 2016 przez mcsobieski00

po pierwsze : dzięki będę pamiętał o kodzie

po drugie : wiem o to chodzi żeby program mnie informował na bieżąco i nie próbowałem nic wpisywać bo w zamyśle miał to zrobić komputer i przelecieć przez funkcje

ta klamra jest potrzebna bo zaznacza zakres całej funkcji

i teraz rodzi się pytanie czemu zatrzymuje się przy drugiej zmiennej bool skoro ma ją podaną z int main()

 

a tu jest lekko inny kod tylko z takim samym zadaniem ;

#include <iostream>
#include <cstdlib>
#include <ctime>

int problem(int liczba, bool z, bool y);

int main()
{
    bool z, y;
    int liczba;
    std::cout << "Podaj liczbe: "<<std::endl;
    std::cin>>liczba;
    std::cout<<std::cin.good();
    std::cin>>z;
    std::cout<<std::cin.fail();
    std::cin>>y;
    std::cout<<"Podales liczbe: "<<problem(liczba , z , y)<<std::endl;
    return 0;
}
int problem(int liczba, bool z, bool y)
{
std::cout<<"twoja liczba to "<<liczba<<std::endl;{
if (z == false)
{
    std::cout<<"coś poszło nie tak"<<std::endl<<"wywalam program";
    return 0;
}
if (y == true)
{
  std::cout<<"coś poszło nie tak"<<std::endl<<"wywalam program";
    return 0;
}
}

return liczba;
}


 

komentarz 21 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
#include <iostream>
#include <cstdlib>
#include <ctime>

int problem(int liczba);

int main()
{

    int liczba;
    std::cout << "Podaj liczbe: "<<std::endl;
    std::cin>>liczba;
    std::cout<<"Podales liczbe: "<<problem(liczba)<<std::endl;
    return 0;
}
int problem(int liczba)
{
    bool z, y;
    std::cout<<"twoja liczba to "<<liczba<<std::endl;{ /*chodzi mi o tę klamrę*/
    std::cout<<std::cin.good();
    std::cin>>z;
    if (z == false)
    {
        std::cout<<"coś poszło nie tak"<<std::endl<<"wywalam program";
        return 0;
    }
    std::cout<<std::cin.fail();
    std::cin>>y;
    if (y == true)
    {
        std::cout<<"coś poszło nie tak"<<std::endl<<"wywalam program";
        return 0;
    }
}

Ponieważ zdefiniowałeś sobie drugą zmienną y i o nią prosisz w funkcji problem() musisz ją podać

komentarz 21 listopada 2016 przez mcsobieski00 Nowicjusz (220 p.)
no właśnie i dlatego zobacz ten kod który wysłałem z narzędzia do kodów

tam sprawdzam poprawność liczby w main() i tam też zapisuje y i z i potem przekazuje je do funkcji i tylko sprawdzam tam ich poprawność
komentarz 21 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
W 22 linijce niepotrzebnie otwierasz zakres "{" i niepotrzebnie go zamykasz w 32 linijce "}".

A tak ponadto to co napisałeś powinno działać. Przypominam, że wartości bool podajesz 0 lub np. 1.
komentarz 21 listopada 2016 przez mcsobieski00 Nowicjusz (220 p.)
kiedy wywalam te nawiasy kompilacja siada i domaga się ich

wiem, że bool przenosi tylko wartości true ,false i o to chodzi żeby przerzucił wartości cin.good() i cin.fail() do funkcji a ten programik dalej ma ten sam problem
1
komentarz 21 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)

no to przypisz sobie te wartości:

z = std::cin.good();
y = std::cin.fail();

i wtedy podawaj je do funkcji:

problem(liczba, z, y);

a nie czekaj aż zostaną podane przez użytkownika: 

std::cin>>z;
std::cin>>y;

i wypisane na ekranie:

std::cout<<std::cin.good();
std::cout<<std::cin.fail();

 

komentarz 21 listopada 2016 przez mcsobieski00 Nowicjusz (220 p.)
czyli "z = std::cin.good();" zadziała tak samo jak wykonywnie cin.good() i zapisze wynik w bool??

dzienki :)

edit: a pamiętasz może gdzie nauczyłeś sie programować ??

wystarczy link do strony czy nazwa
1
komentarz 21 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
przecież z i y to zmienne typu bool - sam je deklarowałeś w 9 linijce.
komentarz 21 listopada 2016 przez mcsobieski00 Nowicjusz (220 p.)
no tak tylko nie wiedziałem że w ten sposób można zapisywać dane

Podobne pytania

0 głosów
1 odpowiedź 109 wizyt
pytanie zadane 17 kwietnia 2017 w C i C++ przez Krzychu234 Początkujący (350 p.)
–1 głos
1 odpowiedź 105 wizyt
0 głosów
0 odpowiedzi 190 wizyt
pytanie zadane 30 maja 2017 w C i C++ przez Huberti Gaduła (4,500 p.)

92,615 zapytań

141,465 odpowiedzi

319,782 komentarzy

61,997 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!

...