Не понимаю почему во втором вызове функции fill проверка на истинность ввода пропускается

Не понимаю почему во втором вызове функции fill проверка на истинность ввода пропускается. Возможно проблема в буфере cin

`int main()
{

    int arr1[length];
    int arr2[length];

    int work1 = 0;
    int work2 = 0;
    fill(arr1, work1);
    printArray(arr1, work1);
    fill(arr2, work2);
    printArray(arr2, work2);
    


}
void fill(int(&arr)[length], int& n)
{

    cout << "Enter int values ( <=" << length << " )\n";
    bool ok = true;

    while (ok && n < length)
    {
        if (cin >> arr[n])
            ++n;
        else ok = false;
    }

    
}
void printArray(int(&array)[length], const int n)
{
    for (int i = 0; i < n; i++)
    {
        cout << array[i] << " ";
    }
}
`

Ответы (1 шт):

Автор решения: AR Hovsepyan

Когда cin в плохом состоянии(например вместо числа ввели другой символ) или каким то образом испорчен, это значит, что символ остался в буфере(не прочтен), и работа cin остановлена. Для продолжения работы потока, вы должны привести его в нормальное состояние, очистив флаги вызовом std::ios_base::clear, а потом еще и пропускать не нужные символы(или всю строку), чтобы продолжить нормальное чтение. В итоге вам нужно переписать тело условия:

else {
        cin.clear();
        cin.ignore(/*тут вы решайте сколько символов пропускать и до какого символа*/); 
        ok = false;
    }
→ Ссылка