Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pętla ( do...while ) warunek kończący

Ostatnio zmodyfikowano 2014-02-21 14:05
Autor Wiadomość
Aran
Temat założony przez niniejszego użytkownika
Pętla ( do...while ) warunek kończący
» 2014-02-19 19:14:06
Witam!
Chcę aby mój program wypisujący wprowadzoną liczbę zakończył działanie gdy wprowadzoną liczbą będzie 0 lub 10 lub 100 lub 1000. Dodatkowo program musi być zabezpieczony przed wpisaniem błędnej liczby.

C/C++
#include<iostream>
using namespace std;
int main()
{
    int A;
    bool sukces;
    do
    {
        cout << "Wprowadz liczbe: " << endl;
        cin >> A;
        sukces = cin.good();
        cin.clear();
        cin.sync();
        if( sukces != 0 )
             cout << "Wybrales liczbe: " << A << endl;
        else cout << "Bledna liczba " << endl;
       
    } while(( sukces != 1 ) ||( A != 0 ) ||( A != 10 ) ||( A != 100 ) ||( A != 1000 ) );
   
    return 0;
}

Naturalnie doszedłem do tego, że powyższy zapis określający warunek kończący pętle jest błędny natomiast nie wiem jak poprawnie można to ująć.
P-104975
libed
» 2014-02-19 19:27:55
C/C++
int val;
bool endloop = false;
do {
    std::cin.sync();
    std::cin.clear();
    std::cout << "Wprowadz liczbe: ";
    std::cin >> val;
    if(( val == 10 ) ||( val == 100 ) ||( val == 1000 ) )
         endloop = true;
   
} while( !endloop || !std::cin );
P-104976
leon_w
» 2014-02-19 21:12:11
@Aran,
Twój sposób też by działał.
Przeanalizuj warunek wykonywania pętli.
1. Pętla wykonuje się, dopóki wprowadzasz poprawną cyfrę
lub
2.Liczba jest różna od zera
lub
3 ... itd.

Praktycznie zawsze jakiś warunek będzie spełniony. Bo jeśli nie będzie różna od 10 to będzie różna od 100.
P-104985
Aran
Temat założony przez niniejszego użytkownika
» 2014-02-19 23:42:57
@leon_w mój sposób niestety nie działa. Inaczej bym nie potrzebował pomocy :) Pętla zakończy działanie gdy warunek pod "while()" zwróci wartość false.
Dzięki @libed za ciekawe rozwiązanie.
Sprawdzę jeszcze czy podany przez Ciebie sposób będę mógł też zastosować do bardziej złożonych przykładów jak np zabezpieczenie kalkulatora z zadania domowego z rozdziału 15 i jak nie będzie problemów zamknę temat.
P-105000
leon_w
» 2014-02-20 17:34:33
Zadziała, jeśli zamiast "lub" użyjesz "i".
while(( sukces != 1 ) ||( A != 0 ) &&( A != 10 ) &&( A != 100 ) &&( A != 1000 ) );
Nie wiem czy określenie:
gdy warunek pod "while()" zwróci wartość false
 jest poprawne.
Pętla wykonuje się tak długo, dopóki warunek jest spełniony.
P-105015
jmaciejjjj7
» 2014-02-21 14:05:48
Użyj zapisu
while( !(( A == 0 ) ||( A == 10 ) ||( A == 100 ) ||( itd.) ) )
P-105052
« 1 »
  Strona 1 z 1