Mam problem z pewnym programem z C++, chciałbym żeby zamiast cin.sync() dało się wpisać cin.ignore(), ponieważ czytałem gdzieś, że cin.ignore() jest lepszym rozwiązaniem jednak nie jestem pewny jak on do końca działa.


#include

using namespace std;

int main()

{

int liczba;


do

{

cin.clear();

cin.sync();

cout >liczba;



} while(cin.fail());


if(cin.good())


cout <<"Twoja liczba to:\t"<



return 0;

}


Odpowiedź :

Działanie metody sync zależy od implementacji, a czyszczenie strumienia jest raczej jej skutkiem ubocznym niż głównym zadaniem, dlatego może się zdarzyć że przy niektórych implementacjach może nie działać (np. visual c++). Dlatego należy używać do tego celu metody ignore.

Przerobiony program:

#include <iostream>

#include <limits>

using namespace std;

int main()

{

int n;

do

{

 cin.clear();

 cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

 cin >> n;

} while (cin.fail());

 cout << "Twoja liczba to:" << n << endl;

return 0;

}

to std::numeric_limits<std::streamsize>::max() to maksymalna ilość znaków w strumieniu, zamiast tego możesz wpisać jakąś dużą liczbę np. 10000, ale tak jest ładniej i poprawniej

o tym jak działają dokładnie metody ignore i sync możesz poczytać w dokumentacji języka c++