Я использую обработку исключений при чтении из файла, чтобы определить, имеет ли часть, которую я хочу сохранить в переменной, правильный тип (например, я не хочу хранить строку в двойной переменной), но когда возникает исключение, курсор не перейдет на следующую строку. Есть ли какой-нибудь возможный способ сделать это?
Если у вас есть включенное исключение для неправильного / неудачного ввода первый неправильный символ во входном потоке вызовет исключение.
Если ваша обработка ошибок состоит в пропуске оставшейся части строки, чтобы возобновить обработку следующей строки, вы должны Чисто состояние ошибки, а затем игнорировать непрочитанные символы строки. Добавьте следующее в ваш код обработки исключений:
InputFile.clear(); // without this, every subsequent file op would fail
InputFile.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
Вы должны однако заботиться, потому что >>
чтение из потоков может также пропустить новые строки, так что отсутствующие данные могут поставить вас уже на следующую строку. Более безопасный подход — читать поток за строкой std::getline()
и проанализировать каждую строку с stringstream
.
Других решений пока нет …