Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Nieprawidłowe działanie cin.sync() i cin.clear()

Ostatnio zmodyfikowano 2017-01-07 09:57
Autor Wiadomość
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?
P-156110
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.
P-156112
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()?
P-156115
karambaHZP
» 2017-01-06 18:03:51
P-156117
czaffik
» 2017-01-06 18:16:22
Powinno ale ponoć jest problem z cin.sync() pod linuksem.
P-156118
kacper1410
Temat założony przez niniejszego użytkownika
» 2017-01-06 19:20:39
Tylko że ja nie mam linuksa :(

P-156124
czaffik
» 2017-01-06 19:22:53
To ciężko mi powiedzieć, u mnie na windzie działa bez problemu.
P-156125
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ć.
P-156129
« 1 » 2
  Strona 1 z 2 Następna strona