for(;;)
{
cin >> x;
if(typeid(x)!=typeid(int))
{
cout << "Zly typ danych. Podaj jeszcze raz";
continue;
}
else if(x<1 || x>10)
{
cout << "Nieprawidlowa ilosc typowanych liczb. Wpisz jeszcze raz\n";
continue;
}
else break;
}
Teraz warunek działa, tylko pozostaje problem, że nie może przestać wyświetlać tego komunikatu - czyli zachowuje się tak, jakby nie nadpisywał tej zmiennej (to jest nie wykonywał instrukcji z początku pętli). Próbowałem czyszczenia pamięci przeznaczonej na tę zmienną, jednak funkcja
memset nie daje rady (umieszczałem ją między komunikatem a instrukcją
continue, na początku pętli też jest źle).
EDIT: Odkryłem dziwne zjawisko. Program sam rozpoznaje typ zmiennej, więc stosowanie
typeid jest zbędne. Czyli kod może wyglądać jak pierwotnie. Problem jednak tkwi w tym, że jeśli wpiszemy nie taki typ do zmiennej, nie zwolni ona pamięci przeznaczonej na tę zmienną(przynajmniej na to wygląda).
EDIT 2: Znalazłem skuteczne rozwiązanie. Problemem było zapchanie strumienia
cin. Prawidłowy kod wygląda tak(a dokładnie jego fragment):
for(;;)
{
cin >> x;
if(x<1 || x>10)
{
cout << "Nieprawidlowa ilosc typowanych liczb. Wpisz jeszcze raz\n";
cin.clear();
cin.ignore(INT_MAX,'\n'); //-----należy dodać #include<limits.h>
}
else break;
}
Teraz program się nie zapętla, a dziękuję za naprowadzenie na dobrą drogę.