inFile >> idsAr[indexCount];
inFile.ignore(1000, '\n');
Вы читаете первое число из строки, затем игнорируете все символы до конца строки, включая второе число.Затем вы пытаетесь прочитать следующее имя, как если бы оно было числом, и, поскольку вы не проверяете ошибки, все идет не так.
Этот ignore
совершенно не нужен: нечего игнорировать междупервое и второе числа в виде >>
будут пропускать любые пробелы в начале.Второй ignore
необходим , так как вам нужно пропустить новую строку в конце строки чисел, прежде чем использовать getline
, чтобы прочитать следующую строку имени.Возможно, вам будет проще использовать только getline
для чтения данных из файла, а затем проанализировать строку чисел с помощью stringstream
.Смешивание отформатированного извлечения (>>
) с извлечением на основе строк может быть затруднено для правильного определения.
После любой операции ввода необходимо проверить состояние потока, чтобы убедиться, что ошибка не произошла.В качестве простого примера:
if (!(inFile >> idsAr[indexCount]) {
/* input failed; handle error as appropriate */
}
Поток имеет несколько флагов состояния, а при сбое извлечения устанавливается флаг fail
, который необходимо очистить перед продолжением использования потока.