C++ 在C+中逐行读取文本文件+;
下面的代码是如何工作的?for循环的计数器在哪里?如何将计数器重置为行号0C++ 在C+中逐行读取文本文件+;,c++,string,io,C++,String,Io,下面的代码是如何工作的?for循环的计数器在哪里?如何将计数器重置为行号0 for (std::string line;std::getline(ifs, line); ) { } 不需要柜台。这相当于 std::string line; while(getline(ifs, line)) { } 有一些方法可以将输入迭代器移回文件的开头。类似于:ifs.seekg(0,std::ios::beg)应该可以做到这一点。您的for循环相当于: { std::string line;
for (std::string line;std::getline(ifs, line); )
{
}
不需要柜台。这相当于
std::string line;
while(getline(ifs, line))
{
}
有一些方法可以将输入迭代器移回文件的开头。类似于:
ifs.seekg(0,std::ios::beg)代码>应该可以做到这一点。您的for
循环相当于:
{
std::string line;
while (std::getline(ifs, line)) {
}
}
换句话说:“只要getline
返回true
”就继续迭代,要将计数器重置为行号0(即流的开头),您应该使用
ifs.seekg (0, ios::beg);
@我找到了一个更简单的方法,我只是关闭并重新打开文件。>ifs.close();打开(文件名)@拉贾特说,这可能“更容易”,但这是一个黑客-重新开放比寻找慢。您确实想搜索。@rajat::shubder::使用seek
。只有一个系统调用而不是两个,再加上关闭/重新打开会引入竞争条件,尽管与此相关的错误可能很少,但它们实际上是不可能调试的。例如,在类似unix的系统上,文件可能同时已从命令行中删除,关闭和重新打开将失败(因为文件将消失),而查找仍然有效。