Когда operator>>
не удается проанализировать ввод, он переводит поток в состояние ошибки, которое необходимо явно очистить, прежде чем вы сможете снова прочитать из потока, например:
cout << "Number of days : ";
int days;
while (!(cin >> days)) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid";
}