2016-06-03 2 views
-2

프로젝트 오일러를 거치면서 간단한 문제로 작업했습니다. 어떤 이유로 참조를 통해 struct Date를 전달할 때 참조 또는 할당하려고 할 때 가비지 값이됩니다. 어떤 아이디어?참조로 전달 된 구조체가 가비지 값이됩니다.

#include <iostream> 

using namespace std; 

bool isLeapYear(int year) 
{ 
    // century 
    if ((year % 100 == 0) && (year % 400 == 0)) 
     return true; 
    // not a century 
    else if ((year % 100 != 0) && (year % 4 == 0)) 
     return true; 

    return false; 
} 

enum Months {JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC}; 

struct Date 
{ 
    int year; 
    Months month; 
    int day; 
}; 

int calculateNumberOfDays(const Date& begin, const Date& end) 
{ 
    int numberOfDays = 0; 

    //PROBLEM: This loop never runs... Upon running it through the debugger 
    //   the value of year is garbage i.e. -859382918 
    //   This results in the loop not being entered and the value 
    //   (numberOfDays) being returned as 0 
    for (int year = begin.year; year < end.year; year++) 
    { 
     if (isLeapYear(year)) 
      numberOfDays += 366; 
     else 
      numberOfDays += 365; 
    } 

    //TODO: Finish for final year 

    return numberOfDays; 
} 

int main() 
{ 
    int numberOfDays = 0; 
    int year = 1900; 
    Months month = JAN; 
    int day = 1; 


    Date begin = { 1990, JAN, 1 }; 
    Date end = { 1901, DEC, 31 }; 

    cout << calculateNumberOfDays(begin, end) << endl; 


    return 0; 
} 
+0

아니요, 필요에 따라 1이 포함되어 있습니다. –

+0

VS2015를 사용하고 있습니까? 그것은 나를 위해 쓰레기 값의 결과입니다. – keelerjr12

+0

전체 코드를 게시 할 수 있습니까? 예를 들어'isLeapYear' 함수가 없습니다. 문제가 다른 곳에서 일어난 것 같습니다. –

답변

2

당신 begin 날짜는 end 일 이후이므로 루프가 실행되지 않습니다. 두 날짜를 바꿔 넣으면 루프가 올바르게 실행됩니다.

year이라는 두 개의 변수가 있기 때문에 디버거가 혼동을 일으킬 수 있습니다. 그것은 잘못된 경로로 당신을 보냈습니다.

+0

뭔가 빠뜨린 것 같습니다. 시작일이 내 종료일보다 이전입니다. – keelerjr12

+1

@ keelerjr12 미안하지만, 1990 년은 그레고리력으로 1901 년 이후입니다. – KABoissonneault

+0

귀하의 시작 연도가 1990이고 귀하의 말년이 1901이라는 것에 동의하십니까? –