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

Warunek If, w którym jest pętla z użyciem bool - który jest przed warunkiem if,

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
1,319 wizyt
pytanie zadane 30 września 2019 w C i C++ przez Shadi25 Nowicjusz (190 p.)

Witam ! Uczę się programowania i utknąłem na zadaniu z pętlą do..while.
Najpierw wkleję kod, a potem powiem o co chodzi.

 

int main()
{
    int liczba;
    int liczba1;


    cout << "Podaj liczbe wieksza od 0 " << endl;
    cin >> liczba;



    bool bCzyBlad =
    cin.fail();
    cin.clear();
    cin.ignore( numeric_limits < streamsize >::max(), '\n' );

    if ( bCzyBlad = true)
        do
        {

            cout<< "Prosze wprowadz cyfe, nie litere - wieksza od 0 :" << endl;
            cin >> liczba;

           bool bCzyBlad2 =
            cin.fail();
            cin.clear();
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );

        }   while ( bCzyBlad = true  );


Chciałem zrobić początek programu taki, że trzeba wczytać liczbę większą od zera i wtedy idziemy dalej. Chciałem też się przygotować w razie, gdyby użytkownik wprowadził literę itp, więc użyłem boola. 
Następnie chciałem zrobić tak, że jeśli bool zwraca 1 to żeby powstała pętla, która będzie tak długo pytała o liczbę, aż ją użytkownik poda (zamiast litery itp ).
Wstawiłem też drugiego boola, żeby kasował błędy, ale tutaj mam problem taki, że warunkiem końca pętli, jest zwrócenie false w boolu nr 1, niestety z tego co rozumiem on już zawsze będzie miał 1.
Nie mam pojęcia, czy mogę zrobić tak, żeby ten bool się zresetował, dlatego postawiłem drugi.
Kiedy stawiam warunek, żeby zakończyć pętle, gdy drugi bool zwróci false, wyskakuje "was not declarated in this scope" przez co rozumiem, że nie mogę sobie zmiennej stworzyć w tej pętli.

Kod pokazuje moment, gdzie warunkiem jest ten 1 bool.

Pytanie jest następujące - czy da się to jakoś zrobić?

Bardzo będę wdzięczny za pomoc. :)

3 odpowiedzi

0 głosów
odpowiedź 30 września 2019 przez Bondrusiek Maniak (61,440 p.)

Witaj

popełniłeś tutaj bardzo częsty błąd. Zamiast operatora porównania użyłeś operatora przypisania. Jeśli chcesz porównać dwie wartości użyj ==, przy przypisaniu wartości do zmiennej użyj =

    if ( bCzyBlad == true)
        do
        {
 
            cout<< "Prosze wprowadz cyfe, nie litere - wieksza od 0 :" << endl;
            cin >> liczba;
 
           bool bCzyBlad2 =
            cin.fail();
            cin.clear();
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
 
        }   while ( bCzyBlad == true  );

 

0 głosów
odpowiedź 30 września 2019 przez gagyn Stary wyjadacz (11,050 p.)

Po pierwsze, uwaga do jakości kodu:

bool bCzyBlad =
cin.fail();

Nigdy nie pisz w taki sposób, bo patrząc na kod, wydaje się jakby to były dwie niezależne od siebie linijki kodu. Zapisuj to lepiej w jednej lini.

bool bCzyBlad = cin.fail();

 

Robiąc warunek taki sam to w nagłówku pętli do while, zrobiłeś rzeczywiście pętlę while.

W takim przypadku wystarczy, że zrobisz to tak:

        while ( bCzyBlad )
        {
 
            cout<< "Prosze wprowadz cyfe, nie litere - wieksza od 0 :" << endl;
            cin >> liczba;
 
            bCzyBlad = cin.fail();
            cin.clear();
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
        }

Jak porównujesz wartości w warunku lub nagłówku pętli to ==, a nie =.

Poza tym, zauważ, że powyżej usunąłem zmienną bCzyBlad2, bo można użyć tej samej co wcześniej. Pętla będzie się wykonywać dopóki użytkownik nie wprowadzi poprawnej wartości.

komentarz 2 października 2019 przez Shadi25 Nowicjusz (190 p.)
Dziękuję bardzo za odpowiedź!

 

Czyli zamiast pętli do... While, zrobiłem sama pętle while? Dobrze rozumiem?

A czy można zrobić to, ale właśnie Pętla do while? Mam wrażenie, że tego oczekuje się ode mnie w zadaniu.

Gdy robię tak jak kolega napisał wyżej, to nawet, gdy wpisuje cyfrę, Pętla ciągle powraca do pytania. Wydaje mi się, że właśnie dlatego, że ten bool jest ciągle jako true.

Pozdrawiam!

Damian
0 głosów
odpowiedź 30 września 2019 przez mokrowski Mędrzec (156,480 p.)
#include <iostream>
#include <limits>

int main()
{
    int liczba;

    for(;;) {
        std::cout << "Podaj liczbe wieksza od 0: ";
        while(!(std::cin >> liczba)) {
            std::cerr << "Proszę wprowadź liczby! Spróbuj jeszcze raz.\n";
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            std::cout << "Podaj liczbe wieksza od 0: ";
        }
        if(liczba > 0) {
            break;
        }
        std::cerr << "Liczba ma być większa od zera! Spróbuj jeszcze raz.\n";
    }

 

Podobne pytania

0 głosów
3 odpowiedzi 288 wizyt
pytanie zadane 16 października 2019 w C i C++ przez Olgierd47 Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 595 wizyt
0 głosów
2 odpowiedzi 713 wizyt
pytanie zadane 3 czerwca 2018 w C i C++ przez MAJ0R Obywatel (1,130 p.)

93,188 zapytań

142,204 odpowiedzi

322,027 komentarzy

62,515 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2817p. - dia-Chann
  2. 2769p. - Łukasz Piwowar
  3. 2759p. - Łukasz Eckert
  4. 2704p. - Tomasz Bielak
  5. 2678p. - Łukasz Siedlecki
  6. 2666p. - rucin93
  7. 2627p. - CC PL
  8. 2485p. - Marcin Putra
  9. 2418p. - Michal Drewniak
  10. 2367p. - Adrian Wieprzkowicz
  11. 2317p. - Mikbac
  12. 2156p. - Anonim 3619784
  13. 2127p. - Michał Telesz
  14. 1733p. - rafalszastok
  15. 1628p. - Dominik Łempicki (kapitan)
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...