2016-12-12 87 views
-5

这里是我现在拥有的代码。就目前而言,它可以完成它所需的一切,以返回必要的相应值。但是,我缺少的一件事是返回与温度相关的索引号相对应的月份的函数。创建一个字符串函数返回一个月

#include <iostream> 
#include <fstream> 
#include <iomanip> 
#include <string> 
#include <cstdlib> 

using namespace std; 

const int NUM_COLS = 2; 
const int NUM_ROWS = 12; 

void getData(ifstream& tempFile, double temps[][NUM_COLS]); 
double averageHigh(double temps[][NUM_COLS], int NUM_ROWS); 
double averageLow(double temps[][NUM_COLS], int NUM_ROWS); 
double indexHighTemp(double temps[][NUM_COLS], int NUM_ROWS); 
double indexLowTemp(double temps[][NUM_COLS], int NUM_ROWS); 
string monthForTemp(double temps[][NUM_COLS], int NUM_ROWS); 

/* 
* 
*/ 
int main(int argc, char** argv) 
{ 
    ifstream tempFile; 
    double temps[NUM_ROWS][NUM_COLS] = {0.0}; 
    tempFile.open("Ch8_ex9Data.txt"); 

    if (!tempFile) 
    { 
     cout << "File does not exist, contact system admin" << endl; 
     return 1; 
    } 
    getData (tempFile, temps); 
    double highAverage = averageHigh(temps, NUM_ROWS); 
    cout << "Average high is: " << highAverage << endl; 

    double lowAverage = averageLow(temps, NUM_ROWS); 
    cout << "Average low is: " << lowAverage << endl; 

    int indexHiTemp = indexHighTemp(temps, NUM_ROWS); 
    cout << "High temp index is: " << indexHiTemp 
     << " which is " << temps[indexHiTemp][0] 
     << " degrees F" << endl; 

    int indexLoTemp = indexLowTemp(temps, NUM_ROWS); 
    cout << "Low temp index is: " << indexLoTemp 
     << " which is " << temps[indexLoTemp][1] 
     << " degrees F" << endl; 
    return 0; 



} 

void getData(ifstream& tempFile, double temps[][NUM_COLS]) 
{ 
    cout << fixed << showpoint << setprecision(1); 
    double hiTemp, loTemp; 

    tempFile >> hiTemp >> loTemp; 

    int rowIndex = 0; 

    while(tempFile) 
    { 
     temps[rowIndex][0] = hiTemp; 
     temps[rowIndex][1] = loTemp; 
     rowIndex++; 
     tempFile >> hiTemp >> loTemp; 
    } 
} 

double averageHigh(double temps[][NUM_COLS], int NUM_ROWS) 
{ 
    double avgHigh = 0.0; 
    double sum = 0.0; 
    int i; 

    for (i = 0; i < NUM_ROWS; i++) 
    { 
     sum += temps[i][0]; 
     //cout << temps[i][0] << endl; 
    } 
    avgHigh = sum/NUM_ROWS; 
    return avgHigh; 
} 

double averageLow(double temps[][NUM_COLS], int NUM_ROWS) 
{ 
    double avgLow = 0.0; 
    double sum = 0.0; 
    int i; 

    for (i = 0; i < NUM_ROWS; i++) 
    { 
     sum += temps[i][1]; 
     //cout << temps[i][1] << endl; 
    } 
    avgLow = sum/NUM_ROWS; 
    return avgLow; 
} 

double indexHighTemp(double temps[][NUM_COLS], int NUM_ROWS) 
{ 
    cout << fixed << showpoint << setprecision(1); 
    double index = 0.0; 
    double maxHighTemp = 0.0; 
    for (int i = 0; i < NUM_ROWS; i++) 
    { 
     if (temps[i][0] > maxHighTemp) 
     { 
      maxHighTemp = temps[i][0]; 
      index = i; 
     } 
    } 
    return index; 
} 

double indexLowTemp(double temps[][NUM_COLS], int NUM_ROWS) 
{ 
    cout << fixed << showpoint << setprecision(1); 
    double index = 0.0; 
    double maxLowTemp = 0.0; 
    string month = " "; 
    for (int i = 0; i < NUM_ROWS; i++) 
    { 
     if (temps[i][0] < maxLowTemp) 
     { 
      maxLowTemp = temps[i][1]; 
      index = i; 
     } 

    } 
    return index, month; 
} 

string monthForTemp(double temps[][NUM_COLS], NUM_ROWS) 
{ 
    string month = " "; 
    switch (index) 
     { 
      case 1 : 
       month = "January"; 
       break; 
      case 2 : 
       month = "February"; 
       break; 
      case 3 : 
       month = "March"; 
       break; 
      case 4 : 
       month = "April"; 
       break; 
      case 5 : 
       month = "May"; 
       break; 
      case 6 : 
       month = "June"; 
       break; 
      case 7 : 
       month = "July"; 
       break; 
      case 8 : 
       month = "August"; 
       break; 
      case 9 : 
       month = "September"; 
       break; 
      case 10 : 
       month = "October"; 
       break; 
      case 11 : 
       month = "November"; 
       break; 
      case 12 : 
       month = "December"; 
       break; 
     } 

    return month; 
} 

我需要的行和列值传递给字符串函数,但我不能完全似乎得到它的权利。任何指针?

谢谢。

+0

您的代码不会编译,并且您不会将月份'索引'传递给函数。 –

+0

对。没有最后的功​​能,并且没有“回归月”;尽管如此,indexLowTemp的一部分。我试图找到一种方法将变量传递到字符串函数中并获得一个月作为响应。 – Ronave4C

+0

这里显示的结果: 平均高61.3 平均低40.7 高温度指数:6是78.2华氏度 低温指数为:0是23.7华氏度 我应该让地方indexLowTemp和indexHighTemp函数也返回一个字符串?或者它应该是一个单独的功能? – Ronave4C

回答

0
string monthForTemp(double temps[][NUM_COLS], NUM_ROWS) 

被错误地声明,无法执行其任务。它应该是这个样子

string monthForTemp(int index) 

但要做到这一点,indexHighTemp和指数返回功能的其余部分需要更改为类似

int indexHighTemp(double temps[][NUM_COLS], int NUM_ROWS) //returns int 
{ 
    cout << fixed << showpoint << setprecision(1); 
    int index = 0; // index is int 
    double maxHighTemp = 0.0; 
    for (int i = 0; i < NUM_ROWS; i++) 
    { 
     if (temps[i][0] > maxHighTemp) 
     { 
      maxHighTemp = temps[i][0]; 
      index = i; 
     } 
    } 
    return index; 
} 

因为数组不能使用double S作为指标。你不能从3.1459获得数组中的项目。此外,因为iint,所以index就是double。最好它是一个浮点表示的整数,最坏的情况下(这里没有问题,因为数字很小),它被floating point imprecision损坏。

这里是一个伟大的pplace到Head into X-Y territory,并提出了完全不同的解决方案:

与阵列替换monthForTemp功能。例如:

std::string monthForTemp[] = 
{ 
    "January", 
    "February", 
    "March", 
    // rest of months go here 
}; 

可作为

cout << "High temp month is: " << monthForTemp[indexHiTemp] 
    << " which is " << temps[indexHiTemp][0] 
    << " degrees F" << endl; 

假设indexHighTemp已被修改为返回int如上建议。

相关问题