Не понимаю почему во втором вызове функции 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;
}