2013-02-26 55 views
0

我在尝试使用函数来处理.dat文件中的数据,但我似乎无法正确读取数据。在第62行,它试图计算在三个不同高度记录的不同温度的低,高和平均值,但这些函数没有处理任何数据。平均函数应该将数字的总数除以数字的数量,但它不是这样做的。另外,我不能高或低工作。我究竟做错了什么?正确使用功能

#include <iostream> 
#include <fstream> 
#include <iomanip> 
#include <conio.h> 
#include <string> 

using namespace std; 

double qMeter = 0; 
double hMeter = 0; 
double oneMeter = 0; 
int solDay = 0; 
string garbage; 
string localTime; 
string decSol; 
ifstream input; 
ofstream output; 

//function prototypes 
double low(double lowTemp); 
double high(double highTemp); 
float average(double avgTemp); 

int main() 
{ 

input.open("curiosity234x.dat"); //opens input data file 
output.open("output.dat"); //opens output data file 


    for (int i = 0; i < 4; i++) //gets rid of the first four lines 
{ 
    getline(input,garbage); 
    cout << endl; 
} 

while (!input.eof()) 
{ 
    int count; 
    double newOneMeter; 
    double newHMeter; 
    double newQMeter; 

    if (solDay == 2) //processes data for the second solar day 
    { 
    input >> solDay >> localTime >> decSol 
    >> newOneMeter >> newHMeter >> newQMeter; 

    oneMeter = oneMeter + newOneMeter; 
    hMeter = hMeter + newHMeter; 
    qMeter = qMeter + newQMeter; 
    count++; 

    output << solDay << fixed << setprecision(1) << setw(5) 
     << "Solar" << "Average" << "Low" << "High" 
     << "Average" << "Low" << "High" 
     << "Average" << "Low" << "High" 
     << "Day" << "Temp" << "Temp" << "Temp" << "Temp" << "Temp" 
     << "Temp" << "Temp" << "Temp" << "Temp" 
     << fixed << setprecision(15) << "1 meter" << ".5 meters" 
     << ".25 meters" 
     << average(oneMeter) << low(oneMeter) << high(oneMeter) 
     << average(hMeter) << low(hMeter) << high(hMeter) 
     << average(qMeter) << low(qMeter) << high(qMeter); 
    } 

    if (solDay == 3) //processes data for the third solar day 
    { 
    input >> solDay >> localTime >> decSol 
    >> newOneMeter >> newHMeter >> newQMeter; 

    oneMeter = oneMeter + newOneMeter; 
    hMeter = hMeter + newHMeter; 
    qMeter = qMeter + newQMeter; 
    count++; 

    output << solDay << fixed << setprecision(1) << setw(5) 
     << "Solar" << "Average" << "Low" << "High" 
     << average(oneMeter) << low(oneMeter) << high(oneMeter) 
     << average(hMeter) << low(hMeter) << high(hMeter) 
     << average(qMeter) << low(qMeter) << high(qMeter); 
    } 
    } 

    cout << endl << "The output.dat file has been written and transmitted."; 
    /* 
    reads first line. Assigns first string to 'int solDay' 
    second to 'string time', third to decSol, fourth to oneMeter, 
    fifth to hMeter and sixth to qmeter. Meters should have setw(). 
    */ 
getch(); 
return 0; 

input.close(); 
output.close(); 
} 


//functions used in main 
double low(double lowTemp) 
{ 
    int test = 10,000; 
    double least; 

    if (lowTemp < test) 
    { 
    lowTemp = test; 
    lowTemp = least;  
    } 
    return least; 
} 

double high(double highTemp) 
{ 
    int test = 10,000; 
    double most; 

    if (highTemp < test) 
    { 
     highTemp = test; 
     highTemp = most;   
    } 
    return most; 
} 

float average(double avgTemp) 
{ 
    avgTemp = avgTemp/count; 
    return avgTemp; 
} 
+0

你重置'lowTemp,highTemp'回到未初始化的变量在每个if? – billz 2013-02-26 23:58:10

+0

如果你说'低(50)'你会回来什么?回答这个问题,你会取得进展。 – tmpearce 2013-02-27 00:00:28

回答

3

看那low例如执行:

int test = 10,000; 
double least; 

if (lowTemp < test) 
{ 
    lowTemp = test; 
    lowTemp = least;  
} 
return least; 

如果if块执行,分配未初始化的leastlowTemp。然后不管它是否执行,你都会返回未初始化的least

为什么要分配testlowTemp,然后才用least覆盖它?

另外10,000不是代表万的整数字面量。你不能在文字中加逗号来分隔数千个。您必须填写10000