Zadanie domowe rozdział 15
Ostatnio zmodyfikowano 2014-12-06 19:30
Hatifnacior Temat założony przez niniejszego użytkownika |
Zadanie domowe rozdział 15 » 2014-12-06 19:18:25 Napisz program, który wczyta liczbę, a następnie wypisze ją na ekranie. Zabezpiecz przed wczytaniem nieprawidłowej liczby. Wykorzystaj do tego celu wiedzę z jednego z poprzednich rozdziałów. Sposób działania programu: 1. Podaj liczbę 2. Jeżeli błąd, wróć do kroku 1. 3. Wypisz liczbę, która została podana.
"Rozwiązałem" zadanie na 2 sposoby:
1:
#include <iostream> int main() { int liczba; bool wczytano; do { std::cout << "Podaj liczbe: " << std::endl; std::cin >> liczba; std::cin.clear(); std::cin.sync(); std::cout << std::cin.good() << std::endl; std::cout << "Podales liczbe: " << liczba << std::endl; wczytano = liczba; } while(wczytano != 1); return 0; }
Program działa dobrze do momentu podania liczby 0 :)
2:
#include <iostream> int main() { int liczba; bool wczytano; do { std::cout << "Podaj liczbe: " << std::endl; std::cin >> liczba; std::cout << "Czy liczba jest poprawna? " << std::cin.good() << std::endl; wczytano = std::cin.good(); switch( wczytano ) { case true: std::cout << "Podana liczba to: " << liczba << std::endl; break; case false: std::cout << "Blad, podaj liczbe: " << std::endl; break; } } while( wczytano != 1); return 0; }
W momencie podania liczby całkowitej program działa dobrze, kiedy wprowadzam znak (literę) pętla działa w nieskończoność i niemożliwe jet podanie kolejnej liczby. Dlaczego?
#include <iostream> int main() { int liczba; bool wczytano; do { std::cout << "Podaj liczbe: " << std::endl; std::cin >> liczba; std::cout << "Czy liczba jest poprawna? " << std::cin.good() << std::endl; wczytano = std::cin.good(); std::cin.clear(); std::cin.sync(); switch( wczytano ) { case true: std::cout << "Podana liczba to: " << liczba << std::endl; break; case false: std::cout << "Blad, podaj liczbe: " << std::endl; break; } } while( wczytano != 1); return 0; }
Program działa. Dzięki za odpowiedź, zamykam temat. |
|
Kaikso |
» 2014-12-06 19:28:55 Wczytujesz dwukrotnie i nie wyczyściłeś bufora. |
|
Rashmistrz |
» 2014-12-06 19:30:25 switch( wczytano ) { case true: std::cout << "Podana liczba to: " << liczba << std::endl; break; case false: std::cout << "Blad, podaj liczbe: " << std::endl; break; Instrukcja warunkowa if ... elseW drugim "rozwiązaniu" nie czyścisz bufora i resetujesz flag... Obsługa strumienia wejściowego: "Czyszczenie zawartości strumienia wejściowego" |
|
« 1 » |