Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中逐行读取文本文件+;_C++_String_Io - Fatal编程技术网

C++ 在C+中逐行读取文本文件+;

C++ 在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循环的计数器在哪里?如何将计数器重置为行号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;
    while (std::getline(ifs, line)) {
    }
}

换句话说:“只要
getline
返回
true

就继续迭代,要将计数器重置为行号0(即流的开头),您应该使用

ifs.seekg (0, ios::beg);

@我找到了一个更简单的方法,我只是关闭并重新打开文件。>ifs.close();打开(文件名)@拉贾特说,这可能“更容易”,但这是一个黑客-重新开放比寻找慢。您确实想搜索。@rajat::shubder::使用
seek
。只有一个系统调用而不是两个,再加上关闭/重新打开会引入竞争条件,尽管与此相关的错误可能很少,但它们实际上是不可能调试的。例如,在类似unix的系统上,文件可能同时已从命令行中删除,关闭和重新打开将失败(因为文件将消失),而查找仍然有效。