У меня есть некоторый код, который циклически проходит строка за строкой через текстовый файл для токенизации данных и вставки их в вектор.
я использую peek (), чтобы проверить, находится ли файл в конце, и если это так, разорвать цикл:
if (fin.peek() == -1)
break;
это работает нормально, но меня немного раздражает включение «магического числа» -1 .. есть ли библиотека для C ++, которую я могу включить, которая функционирует так же, как stdio.h, которая предварительно определяет -1 как EOF , или я должен просто определить const int eof = -1?
«Волшебное значение» -1 определяется как Traits::eof
где черт traits_type
typedef типа вашего плавник переменная.
Другими словами, decltype(fin)::traits_type::eof
Вы хотите использовать std::ios::eof()
, что-то вроде:
if (fin.eof())
break;
Как правило, элементы управления циклом должны выполнять требуемый ввод; если операция ввода завершается неудачно, цикл завершается:
std::string word;
while (std::cin >> word)
std::cout << word << '\n';