while (!(cin >> telefon))
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "To nie jest numer" << endl;
cout << "podaj prawidlowy numer telefonu" << endl;
}
Jeżeli nie będzie chciało działać to dodaj bibliotekę <limits>.
Chodzi o to, żeby wyczyścić już podany cin, bo w takim przypadku jak u Ciebie, on ciągle przechowuje niepożądaną wartość. Do tego if nie pasuje, bo on poprosi o kolejną próbę tylko raz.
Ewentualnie możesz użyć cin.fail()
cin >> telefon;
while (cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "To nie jest numer" << endl;
cin >> telefon;
}
Rozwiązanie nie jest do końca niezawodne, bo jak spróbujesz wpisać wartość np, 123def789 to wartość zostanie przyjęta, ale jak podasz np. abc456789