避免eof C ++的“幻数”

时间:2013-10-16 11:59:25

标签: c++ eof magic-numbers

我有一些代码循环,一行一行地通过文本文件来标记数据并将其插入到矢量中。

我正在使用peek()来测试文件是否在最后,如果是,那么打破循环:

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

这很好用,但我对包含“幻数”-1有点恼火。是否有一个C ++库,我可以包含与预定义的stdio.h相同的函数 - 1作为EOF,或者我应该只定义一个const int eof = -1?

3 个答案:

答案 0 :(得分:3)

“魔术值”-1定义为Traits::eof,其中Traits是 fin 变量类型的traits_type typedef。

换句话说,decltype(fin)::traits_type::eof

答案 1 :(得分:1)

您想使用std::ios::eof(),例如:

if (fin.eof())

    break;

答案 2 :(得分:1)

通常,循环控件应该执行所需的输入;如果输入操作失败,则循环终止:

std::string word;
while (std::cin >> word)
    std::cout << word << '\n';