po wprowadzeniu litery zamiast liczbt program szaleje :)
Ostatnio zmodyfikowano 2016-07-26 15:04
wojtekem Temat założony przez niniejszego użytkownika |
po wprowadzeniu litery zamiast liczbt program szaleje :) » 2016-07-26 13:47:09 Jestem początkujący, stąd łatwe pytanie. Napisałem długi program (około 800 linii i nawet działa bez błędów, problem jest gdy pojawi się Yeti i zamiast wprowadzić liczbę całkowitą wprowadzi literę lub inny znak z klawiatury. Przedstawiam tylko mały fragment programu gdzie wprowadzam dane pętlą Do.....While. W ten sposób wprowadzam wszystkie dane do programu i wszystko działa dobrze, z wyjątkiem gdy wprowadzę literę. Sposób podany w lekcji o obsłudze strumienia wejściowego w tym przypadku nie działa. Proszę o poradę i serdecznie pozdrawiam użytkowników forum. a oto początek mojego kodu, który właśnie działa błędnie po wprowadzeniu litery
#include<iostream> using namespace std;
int main() {
int kto;
do{ cout<<"\n kto rozgrywal ? My-wprowadz 1 Wy-wprowadz 2 :"; cin>> kto;
} while (kto < 1 || kto > 2); }
|
|
BlackFive |
» 2016-07-26 14:02:39 http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Obsluga-strumienia-wejsciowego/12 Sprawdzenie poprawności wprowadzonych danych... Dodaj ten kod aby wyczyściło Ci strumień i będzie działać: std::cin.clear(); std::cin.sync();
zobacz sobie do testów jak to wygląda: #include<iostream> using namespace std;
int main() { int kto; do { cout << "\n kto rozgrywal ? My-wprowadz 1 Wy-wprowadz 2 :"; cin >> kto; std::cout << "Czy udalo sie wczytac? " << std::cin.good() << std::endl; std::cout << "Czy cos nawalilo? " << std::cin.fail() << std::endl; std::cin.clear(); std::cin.sync(); } while( kto < 1 || kto > 2 ); return 0; }
|
|
carlosmay |
» 2016-07-26 14:50:27 Efektem ubocznym tej metody jest opróżnianie bufora strumienia wejściowego (np. w visual 2015 już nie działa). Do tego celu służy std::cin.ignore() Opisany jest tutaj |
|
wojtekem Temat założony przez niniejszego użytkownika |
po wprowadzeniu litery zamiast liczbt program szaleje :) » 2016-07-26 15:04:57 Dziękuję za pomoc, dodany kod std::cin. clear(); std::cin.sync(); pomógł radykalnie, mam w programie kilka takich pętli do wprowadzania danych, obawiałem się, że czyszcząc strumień wejściowy przy wprowadzaniu danych w następnej pętli utracę daną z pętli poprzedniej, gdy wprowdze ten kod we wszystkich pętlach następnych to się przekonam :) dziękuję za życzliwość i pozdrawiam Wojtekem |
|
« 1 » |