fin.ignore()跳过文件中的行?

时间:2017-09-29 23:24:41

标签: c++ file struct while-loop ifstream

我正在研究一些从文件中读取信息并将其存储在结构中的代码。它正在处理我抛出的所有文件,除了一个之外,还有很多不同的错误。 当文件中出现错误时,它会跳过其后面的行并且我不确定原因。我的代码如下:

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

1 个答案:

答案 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呢?想一想!