[Lekcja 9] cin.sync - flagi błędów się nie czyszczą
Ostatnio zmodyfikowano 2013-05-26 15:56
Kanabinol Temat założony przez niniejszego użytkownika |
[Lekcja 9] cin.sync - flagi błędów się nie czyszczą » 2013-05-26 15:17:32 Witajcie ludzie :) mam problem , otóż w 9 lekcji napotkałem problem , najpierw może dam kod programu :) #include <cstdio> #include <iostream> int main() { float a; int b; float c; bool zmienna1 = std::cin.good(); bool zmienna2 = std::cin.good(); bool zmienna3 = std::cin.good(); std::cout << "Podaj Pierwsza Liczbe : "; std::cin.clear(); std::cin.sync(); std::cin >> a; zmienna1; std::cout << "Podaj Druga Liczbe : "; std::cin.clear(); std::cin.sync(); std::cin >> b; zmienna2; std::cout << "Podaj Trzecia Liczbe : "; std::cin.clear(); std::cin.sync(); std::cin >> c; zmienna3; std::cout << "Liczba Pierwsza Wynosi : " << a << "Wczytano? " << zmienna1 << std::endl; std::cout << "Liczba Druga Wynosi : " << b << "Wczytano? " << zmienna2 << std::endl; std::cout << "Liczba Trzecia Wynosi : " << c << "Wczytano? " << zmienna3 << std::endl; return 0; }
w Drugiej liczbie ustawiona flaga jest na 1 czyli oznacza to że wszystko zostało wczytane , co robie źle , przecież bufor oraz flagi są czyszczone przed wczytaniem kazdej zmiennej. |
|
DejaVu |
» 2013-05-26 15:22:27 Generalnie rzecz biorąc po wczytaniu danych powinieneś sprawdzić, czy wystąpił błąd. Ty to robisz na początku, zanim cokolwiek wczytasz, więc tym samym otrzymujesz 3-krotnie informację, że błędów żadnych nie ma. /edit: Poza tym najpierw się wczytuje wartość, później odczytuje się informację czy wystąpił błąd, a potem się czyści stan strumienia po to, aby kolejne operacje mogły się prawidłowo wykonać. |
|
Kanabinol Temat założony przez niniejszego użytkownika |
» 2013-05-26 15:56:39 Dziękuje bardzo za odpowiedź :) z problemem poradziłem sobie tak std::cout << "Podaj Pierwsza Liczbe : "; std::cin >> a; zmienna1 = std::cin.good(); std::cin.clear(); std::cin.sync(); Myślenie nie boli :D , dziękuje za wskazówki , jedziemy dalej z nauką :> |
|
« 1 » |