2017-11-24 3 views
0

이전 보름달이 언제 계산되었는지 계산할 수있는 코드가 있습니다.임의의 숫자를 반환하는 유닉스 시간 변환

int humanreadable(seconds){ 
    time_t now=seconds; 
    struct tm ts; 
    char buf[80]; 
    ts = *localtime(&now); 
    strftime(buf, sizeof(buf), "%Y %m %d", &ts); 
    printf("%s\n", buf);  // Works correctly, returns "2016 12 14", not needed, only used to for a check 
    int prevY = &ts.tm_year+1900; 
    int prevM = &ts.tm_mon+1; 
    int prevD = &ts.tm_mday; 
    printf("%d %d %d\n", prevY,prevM,prevD); // Does not work, returns random numbers 
    //later add return prevY/prevM/prevD pointers so I can pass them on 
return 0; 
} 

int prevFullMoon (int y, int m, int d){ // int * prevY, int * prevM, int * prevD){//temporarely disabled pointers, later need to add them back so assert in main works 
    if(valid_date(y,m,d)==INVALID_DATE){ 
    return valid_date(y,m,d); 
    } 
    int tmp=epoch(y,m,d); 
    while (isFullMoonEpochCheck(tmp)!=1) { 
    tmp=tmp-ONE_DAY; 
    } 
    humanreadable(tmp); 
    return 1; 
} 

int main (int argc, char * argv []) 
{ 
    prevFullMoon(2017, 1, 11);  //temporary code to check what it is returning 
    //assert (prevFullMoon (2017, 1, 11, &y, &m, &d) == 1 && y == 2016 && m == 12 && d == 14); //this needs to pass 
} 

나는 나의 "사람이 읽을 수있는"기능은 내가 그것을 필요 년, 월, 일 인쇄되지 않는 문제가 있습니다. "buf"변수를 인쇄하면 날짜가 올바르게 반환되지만 "prevFullMoon"함수에서 전달할 수 있도록 세 개의 변수로 날짜가 필요합니다.

코드에서 내 의견을 읽으면 무슨 일이 일어나고 있는지, 그리고 무엇을 달성하려고하는지 생각해 내야합니다.

구조와 포인터에 관해서는 꽤 잃어 버렸기 때문에 도움을 얻을 수 있습니다.

추신. 이 스레드에서 나는 주로 시간 변환이 작동하지 않는 이유를 알고 싶습니다. 그러나 포인터로 나를 도우 려하고 prevY, prevM 및 prevD를 전달하려는 경우, 감사히 생각합니다.

validDate의 구현을 보여 didn를하기 때문에 어쩌면 더 문제가 당신에게

+0

당신이 원하는 것을 알아 내고 그 문제의 특성 *이 독자가 아니라 당신에게 있다는 것입니다. –

+1

'struct tm ts; .... int prevY = & ts.tm_year + 1900;은 경고를 제기하고 SO에 대한 게시물을 저장해야합니다. 컴파일러 경고를 활성화하고 시간을 절약하십시오. – chux

+0

두 번째 팁 : "함수가 필요한 연도, 월, 일을 인쇄하지 않습니다."그리고'ts = * localtime (&now); strftime (...')은 반환 값을 먼저 확인해야하는 2 개의 함수입니다. – chux

답변

2

감사하지만 주소에 추가 이러한 문제를 해결 시작합니다

int prevY = &ts.tm_year+1900; 
int prevM = &ts.tm_mon+1; 
int prevD = &ts.tm_mday; 

이어야

int prevY = ts.tm_year+1900; 
int prevM = ts.tm_mon+1; 
int prevD = ts.tm_mday; 
+1

예 이것은 바보 같은 실수로 배울 점이 많다는 것을 보여줍니다. PS 감사합니다. validate는 다소 골치 거리가 있지만 다른 이야기입니다. (대다수는 작동합니다. if 일이 맞다는 것이 옳지 않다.) 그러나 무엇이든간에, 나는 희망을 갖고 그것을 알아낼 것이다. – Jano

관련 문제