首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于一个时间的有关问题

2012-12-14 
关于一个时间的问题代码如下:#include iostream#include time.h#include stringusing namespace std

关于一个时间的问题
代码如下:

#include <iostream>
#include <time.h>
#include <string>
using namespace std;
void main()
{
char iTime[1000];
char iTime2[1000];
cout<<"input iTime"<<endl;
gets(iTime);
cout<<"input iTime2"<<endl;
gets(iTime2);
time_t t1,t2;
struct tm *mytime,*mytime2;
t1=time(NULL);
mytime=localtime(&t1);
int nRt=sscanf(iTime,"%4d%2d%2d %d:%d:%d",&mytime->tm_year,&mytime->tm_mon,&mytime->tm_mday,&mytime->tm_hour,&mytime->tm_min,&mytime->tm_sec);
t2=time(NULL);
mytime2=localtime(&t2);
int nRt2=sscanf(iTime2,"%4d%2d%2d %d:%d:%d",&mytime2->tm_year,&mytime2->tm_mon,&mytime2->tm_mday,&mytime2->tm_hour,&mytime2->tm_min,&mytime2->tm_sec);////断点位置
mytime->tm_year-=1900;
mytime->tm_mon-=1;
t1=mktime(mytime);
mytime2->tm_year-=1900;
mytime2->tm_mon-=1;
t2=mktime(mytime2);
if(t1>t2)cout<<"iTime"<<asctime(mytime)<<" > iTime2"<<asctime(mytime2)<<endl;
else if(t1<t2)cout<<"iTime"<<asctime(mytime)<<" < iTime2"<<asctime(mytime2)<<endl;
else cout<<"iTime"<<asctime(mytime)<<" = iTime2"<<asctime(mytime2)<<endl;
}


问题:输入格式:20121130 08:20:22回车20121201 09:02:01,执行到断点时,mytime和mytime2使用的是相同的指针地址,存储内容也相同,但是输入的是不同的日期时间啊
请问错误出在哪里?如何修改?
[最优解释]
localtime和asctime的返回的指针指向的空间是静态空间,每次调用就覆盖以前的内容,而返回的指针值肯定是一样的.
你要想复用,就得先把里面的内容复制出来.最后输出语句更害人,也许是临时变量问题,不得在同一语句内写两次asctime;
#include <iostream>
#include <time.h>
#include <string>
#include <cstdio>
using namespace std;
int main()
{
    char iTime[1000];
    char iTime2[1000];
    cout<<"input iTime"<<endl;
    gets(iTime);
    cout<<"input iTime2"<<endl;
    gets(iTime2);
    time_t t1,t2;
struct tm m,m2;
    struct tm *mytime,*mytime2;
mytime=&m,mytime2=&m2;
    
    int nRt=sscanf(iTime,"%4d%2d%2d %d:%d:%d",&mytime->tm_year,&mytime->tm_mon,&mytime->tm_mday,&mytime->tm_hour,&mytime->tm_min,&mytime->tm_sec);

    int nRt2=sscanf(iTime2,"%4d%2d%2d %d:%d:%d",&mytime2->tm_year,&mytime2->tm_mon,&mytime2->tm_mday,&mytime2->tm_hour,&mytime2->tm_min,&mytime2->tm_sec);////断点位置
    mytime->tm_year-=1900;
    mytime->tm_mon-=1;
    t1=mktime(mytime);
    mytime2->tm_year-=1900;
    mytime2->tm_mon-=1;
    t2=mktime(mytime2);

    if(t1>t2){cout<<"iTime "<<asctime(mytime); cout <<" > iTime2"<<asctime(mytime2)<<endl;}
    else if(t1<t2){cout<<"iTime "<<asctime(mytime); cout <<" < iTime2"<<asctime(mytime2)<<endl;}
    else cout<<"iTime"<<asctime(mytime)<<endl <<" = iTime2"<<asctime(mytime2)<<endl;


return 0;
}


[其他解释]
t1和t2是一样的,所以mytime和mytime2是一样的。
iTime和iTime2是不一样的,但这里其实没有使用。
[其他解释]
楼主解决了?
[其他解释]
cout<<"iTime"<<asctime(mytime)<<endl <<" = iTime2"<<asctime(mytime2)<<endl;
这样的语句等于
char *p=asctime(mytime);//
char *p2 = asctime(mytime2);//和上面都返回同一地址;
cout << "iTime"<<p<< "=iTime2"<<p2<<endl;
所以输出的内容是一样的.
localtime同理.
[其他解释]
COleDateTime
COleDateTimeSpan

热点排行