C ++ - while(getline)没有得到第一行文件

时间:2013-04-04 00:42:47

标签: c++ reset ifstream getline

我一直在研究一个C ++程序,在那里我读取文件内容然后复制到另一个文件但它似乎总是跳过第一行。我见过其他人遇到麻烦,他们使用了这些代码:

file.clear();
file.seekg(0);

重置位置,但它不适合我。我已经在多个地方尝试过,但仍然没有运气。有任何想法吗?这是我的代码。

ofstream write("Mar 23 2013.txt");

for(int x = 1; x <= 50; x++){

    stringstream ss;
    ss << "MAR23_" << x;

    ifstream file(ss.str().c_str());

    if(!file.is_open())
        cout << ss.str() << " could not be opened/found." << endl;
    else{  

        while(getline(file,line)){

            file >> time >> ch >> sensor1 >> ch >> temp >> ch >> 
                    sensor2 >> ch >> sensor3;

            file.ignore(numeric_limits<streamsize>::max(), '\n');

            //output = convertEpoch(time);

            write << time << "  Temperature:" << temp << "ºF  S1:" <<
                        sensor1 << "  S2:" << sensor2 << "  S3:" << 
                        sensor3 << endl;

        }
        file.close();
    }  
}

write.close();

return 0;

2 个答案:

答案 0 :(得分:9)

您错过了第一行,因为您已将其读入line。事实上,你应该失去的不仅仅是第一行。

从文件中读取后,请使用字符串流。

while (std::getline(infile, line))
{
    std::istringstream iss(line);
    iss>> time >> ch >> sensor1 >> ch >> temp >> ch >> 
                    sensor2 >> ch >> sensor3;
// ...


}

答案 1 :(得分:2)

您可以通过两种方式从文本文件中读取。逐行,getline或逐项>>getline在其参数中读取一行文字;在您的代码中调用getline后,line包含已读入的文本。完成此操作后,file >> time >> ch ...中的提取程序将从getline停止的位置读取