【问题标题】:avoiding "magic number" for eof C++避免 eof C++ 的“幻数”
【发布时间】:2013-10-24 12:45:39
【问题描述】:

我有一些代码在逐行遍历文本文件时循环以标记数据并将其插入向量中。

我正在使用 peek() 来测试文件是否在末尾,如果是则中断循环:

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

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

【问题讨论】:

标签: c++ eof magic-numbers


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你想使用std::ios::eof(),比如:

    if (fin.eof())
    
        break;
    

    【讨论】:

      【解决方案3】:

      一般来说,循环控制应该做需要的输入;如果输入操作失败,则循环终止:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-13
        • 2011-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-10
        • 2013-11-06
        相关资源
        最近更新 更多