2014-02-23 3 views
0

이 프로그램이 올바른 형식으로 출력되도록하는 데 문제가 있습니다. setw 함수는 내가 원하는 것을하지 않는 것 같습니다. 또한, 평균, 최저 및 최고는 나에게 잘못된 대답을주고있다. 이 프로그램은 파일을 읽고 그 중 가장 높은 온도, 가장 낮은 온도 및 그 날의 모든 temps의 평균을 찾기 위해 처리합니다. 매일은 전날과 동일한 값을가집니다.제대로 출력되지 않음

누군가 내가 잘못하고있는 것을 지적 할 수 있습니까?

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

double averageTemp(double total, int number); 
double lowTemp(double valueLow); 
double highTemp(double valueHigh); 
double high = 0; 
double low = 0; 

int main() 
{ 
    std::string dummy = ""; 
    int day, time = 0; 

    double input1[10][50], input5[10][50], input25[10][50]; 
    /* 
    Keeps track of the data: 
     Dimension 1: stores the input for each time of the day. 
    */ 

    double m1[10][3], m5[10][3], m25[10][3]; 
    /* 
    Process data: 
     Dimension 1: 
      Index 1: Keeps track of day 
     Dimension 2: 
      Index 1: Average temp 
      Index 2: Low temp 
      Index 3: High temp 
    */ 

    std::ifstream datain; 
    std::ofstream dataout; 

    datain.open("curiosity234X.dat"); 
    dataout.open("output.dat"); 

    for (unsigned int i = 0; i < 4; i++) 
    { 
     getline(datain, dummy); 
    } 

    int dayCount = 0, loopDay; 

    while (datain >> day >> dummy >> dummy >> input1[day][time] 
        >> input5[day][time] >> input25[day][time]) 
    { 
        while (dayCount == 0) 
        { 
         loopDay = day - 1; 
         dayCount++; 
        } 

    m1[day][0] = averageTemp(input1[day][time], time); 
    m1[day][1] = lowTemp(input1[day][time]); 
    m1[day][2] = highTemp(input1[day][time]); 

    m5[day][0] = averageTemp(input5[day][time], time); 
    m5[day][1] = lowTemp(input5[day][time]); 
    m5[day][2] = highTemp(input5[day][time]); 

    m25[day][0] = averageTemp(input25[day][time], time); 
    m25[day][1] = lowTemp(input25[day][time]); 
    m25[day][2] = highTemp(input25[day][time]); 

    time++; 
    } 

    dataout << std::setw(5) << std::fixed; 
    dataout << "Average" << "Low" << "High" << std::endl 
      << "Temp" << "Temp" << "Temp" <<std::endl 
      << "1 meter" << ".5 meters" << ".25 meters" << std::endl; 

    std::cout << std::setw(5) << std::fixed; 
    std::cout << "Average" << "Low" << "High" << std::endl 
       << "Temp" << "Temp" << "Temp" <<std::endl 
      << "1 meter" << ".5 meters" << ".25 meters" << std::endl; 

    for (unsigned int i = loopDay; i < day; i++) 
    { 
     dataout << std::fixed << std::setprecision(1) << std::setw(5); 
     dataout 
       << m1[day][0] << m1[day][1] << m1[day][2] 
      << m5[day][0] << m5[day][1] << m5[day][2] 
       << m25[day][0] << m25[day][1] << m25[day][2] 
       << std::endl; 

     std::cout << std::fixed << std::setprecision(1) << std::setw(5); 
     std::cout 
        << m1[day][0] << m1[day][1] << m1[day][2] 
      << m5[day][0] << m5[day][1] << m5[day][2] 
       << m25[day][0] << m25[day][1] << m25[day][2] 
        << std::endl; 
    } 

    std::cout << std::endl << std::endl << std::endl 
       << "The output.dat file has been written and transmitted." 
       << std::endl; 

    _getch(); 
    return 0; 
} 

double lowTemp(double valueLow) 
{ 
    if (valueLow < low) 
    { 
     ::low = valueLow; 

     return valueLow; 
    } else 
    { 
     return low; 
    } 
} 

double highTemp(double valueHigh) 
{ 
    if (valueHigh > high) 
    { 
     ::high = valueHigh; 

     return valueHigh; 
    } else 
    { 
     return high; 
    } 
} 

double averageTemp(double total, int number) 
{ 
    double average = total/double(number); 

    return average; 
} 
+1

"부적절한 출력"에 대해 자세히 설명해 주시겠습니까? 어떤 결과를 기대하고 있으며 무엇을 얻고 있습니까? – PakkuDon

+0

@PakkuDon : 파일을 읽고 매일 파일의 최고 온도, 최저 온도 및 모든 temps 평균을 찾습니다. – Brandon

+2

많은 코드를 한 번에 작성할 수는 없으며 제대로 작동 할 것입니다. 작고 간단한 것으로 시작하고, 테스트하고, 완벽하게 작동 시키며, 작은 기능을 추가하고, 테스트하고, 원하는 모든 작업을 수행 할 때까지 반복하십시오. – Beta

답변

1
  • 이 루프 확인하십시오 : 당신은 같은 일 N 배를하고있는, 그래서
    for (unsigned int i = loopDay; i < day; i++) { ... }

    i 변수, 루프 본문 내에서 사용되지 않습니다. 내 생각에 m1[day][...]m1[i][...] (예 : m5m25과 동일)으로 변경해야합니다. loopDay 변수에 대한

  • :

    while (dayCount == 0) 
    { 
        loopDay = day - 1; 
        dayCount++; 
    } 
    

    나는 당신이 의미하는 것은 가정이 방법으로

    if (dayCount == 0) 
        loopDay = day; 
    
    ++dayCount; 
    

    loopDay 저장 본 첫 날 (당신이에 인쇄 할 수 있습니다 첫 번째 날 for 루프). dayCount이 소스 코드의 다른 지점에서 참조되지 않는다는 것을 고려하면 당신은 그것을 없애 쓸 수있다 :

    if (time == 0) 
        loopDay = day; 
    
  • 는 이제 for 루프의 상한을 변경해야합니다 : 당신이 마지막 날이 보이는 것이 포함되어야하므로 < day<= day이어야합니다.

변경할 사항이 있지만 출발점입니다.

관련 문제