我有一些代码可以计算上次满月的时间。
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”变量时,它会正确返回日期,但我需要三个separete变量中的日期,所以我可以从“prevFullMoon”函数传递它们。
如果您在代码中阅读我的评论,您应该了解正在发生的事情以及我想要实现的目标。
在结构和指针方面,我很失落,所以任何帮助都会受到赞赏。
PS。在这个主题中,我主要想知道为什么我的时间转换不起作用,但如果你愿意帮助我指出并传递prevY,prevM和prevD,我会很感激。
谢谢
答案 0 :(得分:2)
也许还有更多问题,因为您没有显示validDate
的实施,但是开始修复这些问题并添加到地址:
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;