2012-10-29 3 views
1

내 함수의 값을 저장하는 참조 변수에 문제가 있습니다. 이 코드가 어디서 잘못됩니까?C++에서 값을 반환하지 않는 참조 변수

//Loads temperature from a disk file and outputs them to the screen 

#include <iostream> 
#include <iomanip> 
#include <fstream> 
#include <string> 
#include "myHeader.h" 
using namespace std; 

//Function prototypes 
void minMax (int mean[], int size, int &, int &); 

//Declare Global variables 
string userFile;   //variable for user input of file 
string date;    //variable for inputFile date 
int low;     //variable for inputFile low 
int high;    //variable for inputFile high 
double sumLow = 0.0;  //variable to hold sum of low temps 
double sumHigh = 0.0; //variable to hold sum of high temps 
ifstream inputFile; 

const int ARRAY_SIZE = 31; 
int lowTemp[ARRAY_SIZE]; 
int highTemp[ARRAY_SIZE]; 

//Accumulators 
int min = 200; 
int max = 0; 
int count = 0; 
int minTemp = 0; 
int maxTemp = 0; 

int main() 
{ 
//Call the heading function 
heading(8, 'A'); 

//Prompt user to enter a file 
cout << "What file do you want to open for input? "; 
cin >> userFile; 
cout << endl; 

inputFile.open(userFile); 

minMax(lowTemp, ARRAY_SIZE, minTemp, maxTemp); 

//Close the file 
inputFile.close(); 

return 0; 
} 

//****************************************** 
//Definition of function minMax 
//****************************************** 

void minMax (int mean[], int size, int & min, int & max) 
{ 

    for (int i = 0; (i < ARRAY_SIZE) && (inputFile >> date >>  low >> high); i++) 
    { 
     lowTemp[i] = low; 
     highTemp[i] = high; 
     count = i; 
     sumLow += lowTemp[i]; 
     sumHigh += highTemp[i]; 

     if (lowTemp[i] < min) 
     { 
      min = lowTemp[i]; 
     } 
     if (highTemp[i] > max) 
     { 
      max = highTemp[i]; 
     } 

     minTemp = min; 
     maxTemp = max; 
    } 

    cout << "array size " << count + 1 << " array low " << minTemp << " array high " << maxTemp << endl << endl; 
    cout << endl << count + 1 << " " << sumLow << " " << sumHigh << endl; 
} 

프로그램이 컴파일되고 어떤 파일을 열 것인지 묻습니다. 나는 파일을 입력하고 리턴한다.

배열 크기 31 어레이 로우 0 어레이 높은 91

31 1,831 2,602

배열 높음 올; 그러나 파일에 따라 배열 low는 34가되어야합니다. 낮은

+0

[SSCCE] (http://sscce.org)와 함께 해 보셨습니까? 일반적으로 StackOverflow에 코드를 덤핑하고 사람들에게 디버깅을 요청하는 것은 눈살을 찌푸리게합니다. 몇 줄만 입력해도 문제를 재현 할 수 있어야합니다 (예 : 입력을 읽지 않아도 됨 (테스트 케이스를 하드 코딩) 또는 크기/높은 계산). 종종 이것을하면 어쨌든 스스로 문제를 해결할 수 있습니다. –

답변

2

는 0으로 초기화된다 : int minTemp = 0;


내가 좋은 텍스트 책을 읽고 추천 할 수 있습니까? 무슨 일이 일어나고 있는지 이해하지 못하는 것처럼 코드가 읽 힙니다.

많은 글로벌 변수는 동일한 이름의 로컬 매개 변수에 의해 숨겨져 있기 때문에 사용되지 않습니다. 전역 변수를 제거하거나 로컬 변수로 바꾸면 코드 품질이 향상됩니다.

예.

//Accumulators 
int min = 200; 
int max = 0; 

.... 

void minMax (int mean[], int size, int & min, int & max) 
{ 

글로벌 minmax, 당신은 "축전지,"완전히 unusused 있습니다 부르는.

+1

'minTemp' (0)을'minMax'에'min'으로 참조로 전달합니다. 각 반복에서 코드는'if (lowTemp [i] Moshe

+0

이제 완벽하게 작동합니다. 값을 저장하기 위해 더 높은 숫자로 두 변수를 초기화해야한다는 것을 알지 못했습니다. – bedwards6968

+0

책 Im은 Tony Gaddis가 C++로 시작 했으므로 참고 용 변수를 보지 못했습니다. – bedwards6968

관련 문제