我有一些代码循环,一行一行地通过文本文件来标记数据并将其插入到矢量中。
我正在使用peek()来测试文件是否在最后,如果是,那么打破循环:
if (fin.peek() == -1)
break;
这很好用,但我对包含“幻数”-1有点恼火。是否有一个C ++库,我可以包含与预定义的stdio.h相同的函数 - 1作为EOF,或者我应该只定义一个const int eof = -1?
答案 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';