Я читаю std :: istream, и мне нужно без извлечения символов проверить, что:
1) Поток не "пустой", то есть попытка прочитать символ не приведет к сбоюсостояние (решается с помощью функции-члена peek () и проверки состояния сбоя, затем возвращается в исходное состояние)
2) Что среди оставшихся символов есть хотя бы один, который не является пробелом, табуляцией илисимвол новой строки
Причина этого в том, что я читаю текстовые файлы, содержащие, скажем, одно целое в строке, и иногда в конце файла могут быть дополнительные пробелы / новые строки, и это вызывает проблемы при попыткевернуть данные из файла в вектор типа int.
Peek (int n), вероятно, сделает то, что мне нужно, но я застрял с его реализацией.Я знаю, что мог бы просто читать istream как:
while (myInt << myIstream) {...} //Will fail when I am at the end
, но та же самая проверка потерпела бы неудачу для ряда различных условий (скажем, у меня есть что-то, что не является целым числом в некоторой строке) и я мог различитьдве ошибки чтения (неожиданная вещь, ничего не осталось) помогли бы мне написать более надежный код, как я мог написать:
while (something_left(myIstream)) {
myInt << myIstream;
if (myStream.fail()) {...} //Horrible things happened
}
Спасибо!