избегать «магического числа» для переполнения стека

У меня есть некоторый код, который циклически проходит строка за строкой через текстовый файл для токенизации данных и вставки их в вектор.

я использую peek (), чтобы проверить, находится ли файл в конце, и если это так, разорвать цикл:

if (fin.peek() == -1)
break;

это работает нормально, но меня немного раздражает включение «магического числа» -1 .. есть ли библиотека для C ++, которую я могу включить, которая функционирует так же, как stdio.h, которая предварительно определяет -1 как EOF , или я должен просто определить const int eof = -1?

2

Решение

«Волшебное значение» -1 определяется как Traits::eofгде черт traits_type typedef типа вашего плавник переменная.

Другими словами, decltype(fin)::traits_type::eof

3

Другие решения

Вы хотите использовать std::ios::eof(), что-то вроде:

if (fin.eof())

break;
1

Как правило, элементы управления циклом должны выполнять требуемый ввод; если операция ввода завершается неудачно, цикл завершается:

std::string word;
while (std::cin >> word)
std::cout << word << '\n';
1
По вопросам рекламы [email protected]