Rozdział 15 zadanie 1
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Rozdział 15 zadanie 1

AutorWiadomość
Temat założony przez niniejszego użytkownika
Rozdział 15 zadanie 1
» 2018-03-03 19:46:17
Dobry wieczór mam pytanie do zadania pierwszego z roz. 15 a mianowicie udało mi się napisać program i co więcej program działa wygląda on następująco:

C/C++
#include <iostream>
int main()

{
    float liczba;
    bool blad;
   
    do
    {
        std::cout << "Podaj liczbe: ";
        std::cin.clear();
        std::cin.sync();
        std::cin >> liczba;
        blad = std::cin.good();
       
        if( blad == 0 )
        {
            std::cout << "Wpisales znak" << std::endl;
        }
        else
        {
            std::cout << "Podales liczbe " << liczba;
        }
    } while( blad == 0 );
   
   
    return 0;
   
}

Jednakże nie do końca sam rozumiem to co napisałem a konkretnie chodzi mi o metode std::cin.good(); bo jeżeli dobrze zrozumiałem w poprzednich rozdzialach to metoda good powoduje sprawdzenie czy wprowadzona wartosc zostala zapisana do zmiennej czyli w naszym przypadku zmiennej float "liczba" no i ja intuicyjnie na poczatku piszac ten program uzyłem w tym miejscu zamiast metody good metody fail bo stwierdzilem ze pomimo tego ze wpiszemy znak to program w przypadku good i tak zapisze nam ten znak w formie ciągu liczb do zmiennej, ale tak się nie dzieje. Może mi ktoś wytłumaczyć czemu używamy tutaj good a nie fail?

Dziękuję i zdaję sobie sprawę że to co napisałem jest mało czytelne może, ale ciężko mi napisać jaśniej o co mi chodzi najlepiej wrzucic kod do kompilatora i spróbować odpalić w takiej formie a potem po zamianie na fail.
P-169718
Temat założony przez niniejszego użytkownika
Już wszystko jasne
» 2018-03-03 20:05:54
Zadając pytanie i wypisując "czarno na białym" o co mi chodzi nagle mnie olśniło i już wiem dlaczego program działa w taki sposób i dlaczego nie działa dla cin.fail(). Otóż program działa również dla fail ale wtedy musimy w pierwszym if'ie zamienic 0 na 1 bo przeciez jezeli "fail" jest true to wtedy ma nam wypisac to co jest w tym ifie a na koncu petli zamiast
while( blad == 0 );
 powinno być
while( blad == 1 );
 bo przeciez jezeli fail jest true to wtedy petla powinna sie wykonac ponownie odwrotnie niz w przypadku good. Ogólnie program z metodą fail wygląda teraz tak :) :

C/C++
#include <iostream>
int main()

{
    float liczba;
    bool blad;
   
    do
    {
        std::cout << "Podaj liczbe: ";
        std::cin.clear();
        std::cin.sync();
        std::cin >> liczba;
        blad = std::cin.fail();
       
        if( blad == 1 )
        {
            std::cout << "Wpisales znak" << std::endl;
        }
        else
        {
            std::cout << "Podales liczbe " << liczba;
        }
    } while( blad == 1 );
   
   
    return 0;
   
}

Przepraszam za zamieszanie, ale może komuś się to przyda.
Pozdrawiam
P-169720
« 1 »
 Strona 1 z 1