Rozdział 15 zadanie 1
Ostatnio zmodyfikowano 2018-03-03 20:05
Robinsoncruzoe 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: #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. |
|
Robinsoncruzoe 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 :) : #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 |
|
« 1 » |