Nieprawidłowe działanie cin.sync() i cin.clear()
Ostatnio zmodyfikowano 2017-01-07 09:57
kacper1410 Temat założony przez niniejszego użytkownika |
Nieprawidłowe działanie cin.sync() i cin.clear() » 2017-01-06 16:45:12 Mam problem z programem:
#include "stdafx.h" #include <iostream> using namespace std; int main() { int a,b; cout << "Wprowadz liczbe:"; cin >> a; cout << "Wczytano? " << cin.good() << endl; cin.clear(); cin.sync();
cout << "Wprowadz druga liczbe:"; cin >> b; cout << "Wczytano? "<< cin.good() << endl; cin.clear(); cin.sync();
cout << "Liczba pierwsza = " << a << endl; cout << "Liczba druga = " << b << endl;
return 0; }
Przy wpisaniu prawidłowych wartości wszystko działa jak należy, jednak jeśli zamiast liczny wpiszemy literę otrzymuje:
Wprowadz liczbe:a Wczytano? 0 Wprowadz druga liczbe:Wczytano? 0 Liczba pierwsza = -858993460 Liczba druga = -858993460 Press any key to continue . . .
Czy polecenia cin.sync() i cin.clear() nie powinno zapobiec takiej sytuacji i pozwolić mi na wprowadzenie drugiej liczby mimo, że pierwsza była nieprawidłowa? |
|
Monika90 |
» 2017-01-06 17:12:19 Zamiast tego pierwszego cin.sync(); użyj cin.ignore(numeric_limits<streamsize>::max(), '\n');to wymaga #include <limits> Drugie cin.sync(); możesz usunąć w ogóle. |
|
kacper1410 Temat założony przez niniejszego użytkownika |
» 2017-01-06 17:33:23 Dziękuje za pomoc :) Do czego w takim razie mógłbym użyć cin.sync()? |
|
karambaHZP |
» 2017-01-06 18:03:51 |
|
czaffik |
» 2017-01-06 18:16:22 Powinno ale ponoć jest problem z cin.sync() pod linuksem. |
|
kacper1410 Temat założony przez niniejszego użytkownika |
» 2017-01-06 19:20:39 Tylko że ja nie mam linuksa :(
|
|
czaffik |
» 2017-01-06 19:22:53 To ciężko mi powiedzieć, u mnie na windzie działa bez problemu. |
|
Monika90 |
» 2017-01-06 19:56:52 To co robi cin.sync() nie zależy od systemu operacyjnego, ale od implementacji biblioteki standardowej dołączonej do waszych kompilatorów. Dlatego najlepiej nie używać cin.sync(), a zamiast tego używać ignore, tak jak to pokazałam wyżej. Ale, poza niektórymi przypadkami, nie wystarczy bezmyślnie zastąpić sync przez ignore, trzeba zrozumieć co ignore robi ze strumieniem i kiedy tego użyć. |
|
« 1 » 2 |