C ++ ifstream跳过第一行

时间:2013-08-01 04:39:05

标签: c++ string ifstream

这是我的代码。

#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

int main ( ){
    ifstream inFile;

    char date1[8], date2[8];
    int dayTemp1[24], dayTemp2[24];

    inFile.open("weatherdata.txt");
        if(inFile.fail()){
        cout << "File failed to open.";
        exit(1);
    }

    inFile >> date1 >> date2;


    cout << date1 << endl;
    cout << date2 << endl;

inFile.close();

return 0;
}

weatherdata.txt文件的前两行是:
01/04/13
13年1月5日


date1应该包含第一个日期,但是在打印时它只打印&#39; \ n&#39;字符(空行)。 我不知道代码是如何跳过第一个日期行的。 任何和所有的帮助表示赞赏。我是C ++的初学者。

2 个答案:

答案 0 :(得分:1)

使用std :: string代替:

#include <string>
std::string date1;
std::string date2;
//...

inFile >> date1 >> date2;

OR

std::getline(inFile, date1);
std::getline(inFile, date2);

答案 1 :(得分:0)

@billz为您解决了这个问题,所以我会提供一个解释:

问题是你的char数组恰好分配了8个字节(在这种情况下是字符),但没有为强制性空字节(\0)留出空间。我的假设是导致未定义的行为,当你打印时,由于这个原因你没有得到正确的输出。例如,在Linux上,我没有将第一行视为空白,实际上我得到了:

  

01/04/1301/05/13
  13年1月5日

这对我来说是一个明确的指示,当插入到达假定的空字节时插入没有停止。解决方案是允许您的char数组至少保存 9 字节。

在此上下文中使用std::string是有益的,因为它完全避免了这个问题(它是动态大小的字符串的容器)。它的大小将伴随额外的字符(以及空字节)。