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

Pętla do ... while (praca domowa)

Ostatnio zmodyfikowano 2015-11-11 22:25
Autor Wiadomość
carlosmay
» 2015-11-11 20:47:53
Rozwiązanie problemu już padło. Przeczytaj jeszcze raz post i zastosuj podpowiedzi.
P-139972
Master_Yoga
» 2015-11-11 20:51:09
Masz racje carlosmay, ale to dobry nawyk i zapewne w przyszłości zaoszczędzi mi trochę nerwów - zgaduję, że wiesz o co chodzi :)

Spróbuj rozwiązać problem sam, jeżeli sobie nie poradzisz to proszę bardzo:
http://wklej.org/id/1839722/
P-139973
carlosmay
» 2015-11-11 20:56:42
C/C++
cin.ignore( 999, '\n' ); // zamiast cin.sync()

W nowym standardzie usunięto możliwość czyszczenia strumienia metodą .sync()
P-139974
Bidi
Temat założony przez niniejszego użytkownika
» 2015-11-11 21:06:38
C/C++
#include <iostream>
using namespace std;

int main()
{
    float a;
    bool b;
   
    cout << "Podaj liczbe = ";
    cin >> a;
    b = cin.good();
    cin.clear();
    cin.sync();
   
    if( b == 0 )
    {
        do
        {
            cout << "Podaj liczbe = ";
            cin >> a;
            b = cin.good();
            cin.clear();
            cin.sync();
        } while( b == 0 );
       
        cout << "Podales liczbe = " << a;
    }
   
    return 0;
   
   
}
dobra rozumiem czemu po if ma być (b == 0) ale nie rozumiem dlaczego po while ma być (b == 0) jeśli while to warunek kończący. Czyli żeby ta pętla(while (b == 0)) się skończyła b musi wynosić 0 czyli musimy źle dane wpisać, a pętla się kończy gdy zrobimy to dobrze i b wyniesie 1 to bez sensu. I jeszcze jedno gdzie mam wpisać
cout << "Podales liczbe = " << a;
 żeby po pierwszym poprawnym wpisaniu liczby pokazało mi jaką wpisałem.
P-139975
carlosmay
» 2015-11-11 21:12:19
dobra rozumiem czemu po if ma być (b == 0) ale nie rozumiem dlaczego po while ma być (b == 0)
 wpisanie literki, czyli nieprawidłowych danych powoduje uruchomienie if'a i pętli.
Pętla będzie kręcić się póki wpisujesz coś innego niż oczekuje tego program.
C/C++
if( b == false ) //...
     } while( b == false );

 jest czytelniejsze
P-139976
Master_Yoga
» 2015-11-11 21:14:49
printowanie do konsolki powinieneś dać między return a końcem pętli.
Wartość liczbowa false to 0, a true to 1, także jak kto woli.
P-139977
carlosmay
» 2015-11-11 21:19:38
printowanie do konsolki powinieneś dać między return a końcem pętli.
 
C/C++
} while( b == 0 );

cout << "Podales liczbe = " << a;
}

return 0;
 przecież jest.
Daj za klamrą if'a

Wartość liczbowa false to 0, a true to 1, także jak kto woli.
 Używanie true i false od razu wskazuje na typ bool, a liczby 0 i 1 nie. Trzeba wyszukać w kodzie deklaracji zmiennej.

A jeszcze lepiej napisać tak
C/C++
if( !b ) //...
     } while( !b );

P-139978
Bidi
Temat założony przez niniejszego użytkownika
» 2015-11-11 21:23:08
C/C++
#include <iostream>
using namespace std;

int main()
{
    float a;
    bool b;
   
    cout << "Podaj liczbe = ";
    cin >> a;
    b = cin.good();
    cin.clear();
    cin.sync();
   
    if( b == 0 )
    {
        do
        {
            cout << "Podaj liczbe = ";
            cin >> a;
            b = cin.good();
            cin.clear();
            cin.sync();
        } while( b == 0 );
       
        cout << "Podales liczbe = " << a;
    }
    cout << "Podales liczbe = " << a;
    return 0;
   
   
}

tak miałem dopisać? bo jeśli tak to dalej jest coś nie tak bo teraz niby jest to co chciałem czyli po wpisaniu za pierwszym razem dobrze danych pokazuje mi potem jaką liczbe wpisałem ale za to kiedy wpisze na początku źle dane potem dobrze wyskakuje mi dwa razy jaką podałem liczbe.

A co do pętli to ja rozumiem że wpisanie źle danych uruchamia pętlę. Nie rozumiem Dlaczego pętlę kończy b = 0 jeśli żeby otrzymać b = 0 musimy wpisać błędnie dane.
P-139979
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona