我正在研究一些从文件中读取信息并将其存储在结构中的代码。它正在处理我抛出的所有文件,除了一个之外,还有很多不同的错误。 当文件中出现错误时,它会跳过其后面的行并且我不确定原因。我的代码如下:
void readFile(char fileName[], accessRecord file[])
{
ifstream fin(fileName);
int i = 0;
while (fin.good())
{
fin >> file[i].fileName >> file[i].userName
>> file[i].timeStamp;
i++;
if (fin.fail())
{
fin.clear();
fin.ignore(256, '\n');
}
}
fin.close();
}
这是造成问题的File。
答案 0 :(得分:0)
问题是你在失败时不会使用换行符。
为什么不将整行解析为字符串,然后验证它?这样,如果验证失败,您将安全地转到下一行。
#include <sstream>
#include <string>
std::string line;
while (std::getline(infile, line))
{
std::istringstream iss(line);
if (!(iss >> file[i].fileName >> file[i].userName >> file[i].timeStamp)) {
// Error. go to the next line here
continue;
}
// process your data
}
PS:灵感来自Read file line by line。此外,为什么不在普通的C风格数组上使用std::vector
呢?想一想!