Lekcja 9 std::cin.clear()
Ostatnio zmodyfikowano 2013-09-01 23:22
Pawelek Temat założony przez niniejszego użytkownika |
Lekcja 9 std::cin.clear() » 2013-08-29 22:04:03 Witam. Mam problem z jedna z prac domowych w 9 lekcjii Bardzo prosil bym o mala pomoc. Zadanie domowe Napisz program, który wczyta trzy liczby rzeczywiste, a na końcu programu je wszystkie wypisze. Zadbaj o to, by bufor strumienia wejściowego był za każdym razem czyszczony. Wynik końcowy powinien również zawierać informacje czy wczytanie danej liczby się powiodło.
Przykładowe dane wejściowe
13.3 tak 123 33.22nie Przykładowe dane wyjściowe
Liczba pierwsza to: 13.3. Wczytano? 1. Liczba druga to: 0. Wczytano? 0. Liczba trzecia to: 33.22. Wczytano? 1. |
moj program wyglda nastepujaca #include <iostream> int main() { float liczba1; int liczba2; float liczba3; std::cout << "Podaj pierwsza liczbe="; std::cin >> liczba1; std::cin.clear(); std::cout << "Podaj druga Liczbe="; std::cin >> liczba2; std::cin.clear(); std::cout << "Podaj trezcia liczbe="; std::cin >> liczba3; std::cin.clear(); std::cout << "lcizba pierwsza to:" << liczba1 << std::endl; std::cout << "Udalo sie\t" << std::cin.good() << std::endl; std::cout << "liczba druga to:" << liczba2 << std::endl; std::cout << "udalo sie\t" << std::cin.good() << std::endl; std::cout << "liczba trzecia to:" << liczba3 << std::endl; std::cout << "udalo sie\t" << std::cin.good() << std::endl; return 0; } zaladujac go oraz wpisujac 2 niewiadoma z tak 123 nieczysci mi strumienia wejsciowego i wyskakuje blad. Prosze o pomoc Pozdrawiam :) |
|
Paweu |
... » 2013-08-30 08:35:50 Nie wiem czy to chodzi o to, bo dopiero skończyłem tą lekcję i jestem w sumie jeszcze zielony ale myślę, że dodanie linijki std::cin.sync(); przy każdym czyszczeniu bufora powinno załatwić sprawę ;) Jeśli się mylę to przepraszam. |
|
pekfos |
» 2013-08-30 08:55:05 Samo wyczyszczenie flag błędu nic nie da, jeśli przyczyna błędu nie została poprawiona, tj błędne dane wciąż są w strumieniu. Brakuje sync(). Dodatkowo wszystkie wywołania good() są tu bez sensu, bo przecież clear() czyści flagi błędów. |
|
Pawelek Temat założony przez niniejszego użytkownika |
» 2013-08-30 18:34:47 Okey dzieki wielkie postaram sie poprawic i zobacze:) a w jaki sposob mam napisal program ktory mi pokarze czy dane zostaly poprawnie wczytane jak clear czysci mi flage ?? |
|
pekfos |
» 2013-08-30 18:43:51 Użyj zmiennych? |
|
Pawelek Temat założony przez niniejszego użytkownika |
» 2013-08-30 23:28:33 okey dzieki za pomoc biore sie do roboty :) |
|
Pawelek Temat założony przez niniejszego użytkownika |
» 2013-09-01 21:56:28 Napisalem ten proram troszeczke inaczej lecz ciagle jest jeden problem. niewiem w jaki sposob mam zrobic aby pokazalo czy liczba zostala poprawnie wczytana ja to sobie w ten sposob wyobrazalem lecz niestety zawsze wysakkuje poprawnie:( #include <iostream> int main() { float liczba1; float liczba2; float liczba3; bool Udalosie = std::cin.good(); std::cin.clear(); std::cin.sync(); std::cout << "Podaj pierwsza liczbe="; std::cin >> liczba1; std::cout << "Udalo sie:" << Udalosie << std::endl; std::cin.clear(); std::cin.sync(); std::cout << "Podaj druga Liczbe="; std::cin >> liczba2; std::cout << "Udalo sie:" << Udalosie << std::endl; std::cin.clear(); std::cin.sync(); std::cout << "Podaj trezcia liczbe="; std::cin >> liczba3; std::cout << "Udalo sie:" << Udalosie << std::endl; std::cout << "lcizba pierwsza to:" << liczba1 << std::endl; std::cout << "liczba druga to:" << liczba2 << std::endl; std::cout << "liczba trzecia to:" << liczba3 << std::endl; return 0; } rezultat po wcyztaniu 2 powinno wyskoczyc ze zostala niepoprawnie wczytana lecz umnie zostaje poprawnie wcyztana :( nieiwm jak to zrobic juz kilka mozliwosci probowalem prosil bym o pomoc Pozdrawiam:) |
|
SeaMonster131 |
» 2013-09-01 22:02:57 Sprawdzaj czy udało się wczytać liczbę po każdym wpisaniu ciągu znaków. |
|
« 1 » 2 |