【发布时间】:2012-10-11 02:56:24
【问题描述】:
下面的代码是如何工作的? for 循环的计数器在哪里?如何将计数器重置为行号 0。
for (std::string line;std::getline(ifs, 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,就继续迭代”。
【讨论】:
seek。只有一个系统调用而不是两个,加上关闭/重新打开会引入竞争条件,虽然与此相关的错误可能很少见,但实际上无法调试。例如,在类 unix 系统上,文件可能同时已从命令行中删除,关闭并重新打开将失败(因为文件将消失),而查找仍然有效。
要将计数器重置为第 0 行(即流的开头),您应该使用
ifs.seekg (0, ios::beg);
【讨论】: