尝试使用ifstream读取数据后显示错误的数字

时间:2017-07-10 06:12:13

标签: c++ io ifstream

我有一个文本文件,我试图用ifstream读取几行数据,然后我可以将它们添加到一个链表。我使用了我老师提供给我的主要课程/功能,所以我没有亲自编写任何课程/功能。我已经写了一些其他的类,如果有必要我可以提供它,但是在调试时,问题会在主函数开始尝试读入数据时立即开始。

#include <iostream>
#include <fstream>
#include "datalogger.h"

using namespace std;

int main(int argc, char** argv) {

datalogger dl;

if (argc != 2) {
    cout << "Usage: " << argv[0] << " <datafile>" << endl;
    exit(0);
}

// Read the data

char* datafile = argv[1];
ifstream infile(datafile);
int timestamp;
double temperature;
double windspeed;

while (!infile.eof()) {
    infile >> timestamp;
    infile >> temperature;
    infile >> windspeed;

    if (!infile.eof()) {
        dl.addData(timestamp, temperature, windspeed);
    }
}

// Output the report
dl.printReport();

return(0);
}

datafile(smallerdata.txt)的内容如下:

1480906168 -226 361
1480906168 -224 270
1480906175 -222 326
1480906179 -218 236
1480906187 -218 145
1480906189 -216 109
1480906189 -212 145
1480906190 -208 153
1480906197 -204 90

中读取的第一行的timestamp 应为1480906168&amp; temperaturewindspeed 为-226&amp;分别为361。相反,我的调试器在第24-27行的断点处暂停时给出了这些值:

timestamp = 0

temperature = 2.1219889530967339e-314

windspeed = 3.184022971431627e-314

这些价​​值来自&amp;为什么呢?

2 个答案:

答案 0 :(得分:0)

我建议您添加检查文件是否已打开,如:

ifstream infile(datafile);
if (!infile.is_open())
{
    cout << "File " << argv[1] << " cannot be open!" << endl;
    exit(0);
}

并且还改变循环的条件,例如:

while (infile.good()) {
    infile >> timestamp;
    infile >> temperature;
    infile >> windspeed;
    // just to simplify debugging
    cout << "timestamp   = " << timestamp << endl
        << "temperature = " << temperature << endl
        << "windspeed   = " << windspeed << endl;
    // your data processing
    if (!infile.eof()) {
         dl.addData(timestamp, temperature, windspeed);
    }
}

答案 1 :(得分:0)

为什么在文件中有整数值时会读到double?

double temperature;
double windspeed;

应该是

int temperature;
int windspeed;