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++