CriSio Temat założony przez niniejszego użytkownika |
Kurs 1.9 Obsługa strumienia wejściowego - Zadanie domowe » 2020-11-04 16:34:36 Cześć, niestety trochę ten temat (http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Obsluga-strumienia-wejsciowego/12) mi namieszał w głowie i pogubiłem się już w pisaniu tego kodu. Jest ktoś w stanie rzucić na niego okiem i powiedzieć mi co jest nie tak tutaj? Po kompilacji niby wszystko pokazuje okej, ale bool nie reaguje. Dzięki wielkie! #include <iostream> #include <limits>
int main() { float a; float b; float c; bool aczyBlad = std::cin.fail(); bool bczyBlad = std::cin.fail(); bool cczyBlad = std::cin.fail(); std::cout << "Podaj liczbe 13.3 :"; std::cin >> a; aczyBlad = std::cin.fail(); std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); std::cout << "Podaj liczbe tak 123 :"; std::cin >> b; bczyBlad = std::cin.fail(); std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); std::cout << "Podaj liczbe 33.22nie :"; std::cin >> c; cczyBlad = std::cin.fail(); std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); std::cout << "Liczba pierwsza to: " << a << " Blad? " << std::cin.fail() << std::endl; std::cout << "Druga liczba to: " << b << " Blad? " << std::cin.fail() << std::endl; std::cout << "Trzecia liczba to: " << c << " Blad? " << std::cin.fail() << std::endl; return 0; }
|
|
pekfos |
» 2020-11-04 18:36:31 Niczego nie robisz z tym boolem. Przypisujesz do nich wartości i co dalej mają zrobić? |
|
CriSio Temat założony przez niniejszego użytkownika |
» 2020-11-04 18:44:56 Właśnie użyłem go podczas wpisywania liczb cczyBlad = std::cin.fail(); i próbowałem tez dodać go na końcu w wyświetlaniu liczb wcześniej, ale niestety nic mi to nie dało. Ciezko mi trochę zrozumiec ten temat |
|
pekfos |
» 2020-11-04 19:32:45 Samo przypisywanie nie jest pomocne. Jest sens trzymać dane w pamięci tylko jeśli zamierzasz ich użyć. Powinieneś wypisywać wartość z tych 3 zmiennych bool na końcu, zamiast wypisywać std::cin.fail(). Wartość jaką dostajesz z std::cin.fail() jest ściśle zależna od kontekstu, na 9 wywołań tylko 3 są w dobrych miejscach. |
|
CriSio Temat założony przez niniejszego użytkownika |
» 2020-11-04 20:33:27 Hmmm, nie mogę chyba zatrybić tego tematu :/ . Przypisałem bool do wartości std::cin.fail() i zamieniłem trochę końcówkę, aby ich ponownie nie wypisywać. Cały czas problem się rozchodzi o to, że w konsoli wyskakuje mi za każdym razem to 0. Podaj liczbe 13.3 :13.3 Podaj liczbe tak 123 :tak 123 Podaj liczbe 33.22nie :33.22nie Liczba pierwsza to: 13.3 Blad? 0 Druga liczba to: 0 Blad? 0 Trzecia liczba to: 33.22 Blad? 0 #include <iostream> #include <limits>
int main() { float a; float b; float c; bool aczyBlad = std::cin.fail(); bool bczyBlad = std::cin.fail(); bool cczyBlad = std::cin.fail(); std::cout << "Podaj liczbe 13.3 :"; std::cin >> a; std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); std::cout << "Podaj liczbe tak 123 :"; std::cin >> b; std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); std::cout << "Podaj liczbe 33.22nie :"; std::cin >> c; std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); std::cout << "Liczba pierwsza to: " << a << " Blad? " << aczyBlad << std::endl; std::cout << "Druga liczba to: " << b << " Blad? " << bczyBlad << std::endl; std::cout << "Trzecia liczba to: " << c << " Blad? " << cczyBlad << std::endl; return 0; } |
|
pekfos |
» 2020-11-04 20:53:21 std::cin >> a; std::cin.clear(); Pierwsza linia może ustawić informację o błędzie, druga linia niszczy informację o błędzie. Żeby sprawdzić czy operacja się powiodła, musisz to zrobić po tej operacji (inaczej próbujesz przewidywać przyszłość) i przed wyczyszczeniem stanu strumienia. |
|
CriSio Temat założony przez niniejszego użytkownika |
» 2020-11-04 21:13:27 Nie wiem, czy o to chodzi ale próbuje bool wpuścić między dwie linie które udostępniłeś: std::cout << "Podaj liczbe 13.3 :"; std::cin >> a; aczyBlad; std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); Nadal mam ten problem ze sprawdzeniem błedu i wyskakuje mi 0. Powinienem iść w tym kierunku czy w ogóle od złej strony się za to zabieram? |
|
pekfos |
» 2020-11-04 21:49:30 Miałeś dobrze na samym początku std::cin >> b; bczyBlad = std::cin.fail(); std::cin.clear(); Zmienna przechowuje wyłącznie wartość, taką jaka była obliczona w momencie przypisania do tej zmiennej. Na wynik fail() wpływają operacje jakie wykonujesz na strumieniu, więc nie możesz tego odczytać byle gdzie. |
|
« 1 » 2 |