이전 보름달이 언제 계산되었는지 계산할 수있는 코드가 있습니다.임의의 숫자를 반환하는 유닉스 시간 변환
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를하기 때문에 어쩌면 더 문제가 당신에게
당신이 원하는 것을 알아 내고 그 문제의 특성 *이 독자가 아니라 당신에게 있다는 것입니다. –
'struct tm ts; .... int prevY = & ts.tm_year + 1900;은 경고를 제기하고 SO에 대한 게시물을 저장해야합니다. 컴파일러 경고를 활성화하고 시간을 절약하십시오. – chux
두 번째 팁 : "함수가 필요한 연도, 월, 일을 인쇄하지 않습니다."그리고'ts = * localtime (&now); strftime (...')은 반환 값을 먼저 확인해야하는 2 개의 함수입니다. – chux