标题:这是SUN公司的一道改错的题!请大家踊跃发表意见
只看楼主
单调黑白
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-10-4
 问题点数:0 回复次数:10 
这是SUN公司的一道改错的题!请大家踊跃发表意见

//"LF_DateTime.h"

#include <time.h>

class CLF_DateTime
{
private:
struct tm *local;
time_t t;
char str[80];
public:
CLF_DateTime(int year, int month, int day,int hour, int min,int sec);
~CLF_DateTime();
void display();
};

#include "LF_DateTime.h"
#include <time.h>
#include <iostream>

using namespace std;

CLF_DateTime::CLF_DateTime(int year, int month, int day,int hour, int min,int sec)
{
local = new tm;
local->tm_year = year;
local->tm_mon = month;
local->tm_mday = day;
local->tm_hour =0;
local->tm_min =0;
local->tm_sec =0;

}

CLF_DateTime::~CLF_DateTime(void)
{
delete(local);
}

void CLF_DateTime::display()
{

strftime(str*,80,"%Y-%m-%d %H:%M:%S",local);
cout<<"Your input time is:"<<str<<endl;
}
int main()
{

CLF_DateTime str(2005,10 ,01 , 11,50,23);

str.display();

return 0;
}

搜索更多相关主题的帖子: int SUN DateTime CLF 踊跃 
2007-11-08 10:43
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 
有点偏呢,

我都没怎么用时间函数


mark

Fight  to win  or  die...
2007-11-08 12:26
GNUREN
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2007-10-3
得分:0 
为什么要关注它是不是时间函数呢?
考察的是c++

问君何能尔,心远地自偏。 采菊东篱下,悠然见南山。
2007-11-08 13:08
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 

也不是纯c++吧
c的部分多些,比如那个strftime,c++不是那样的用法。

strftime(str*,80,"%Y-%m-%d %H:%M:%S",local);
显然第一个参数应该是str而不是str*

构造函数那里时,分,秒的赋值没有接受参数。

其他还有没就不晓得了!


Fight  to win  or  die...
2007-11-08 13:18
圆圆的鸟蛋
Rank: 1
等 级:新手上路
帖 子:216
专家分:0
注 册:2007-4-22
得分:0 
还有一个成员变量 time_t t 根本就没有过嘛。。构造函数也没有给它赋初值。。

鸟蛋开始孵化。。。我等待那一天Forever。。
2007-11-08 15:17
圆圆的鸟蛋
Rank: 1
等 级:新手上路
帖 子:216
专家分:0
注 册:2007-4-22
得分:0 
以下是引用aipb2007在2007-11-8 13:18:49的发言:

也不是纯c++吧
c的部分多些,比如那个strftime,c++不是那样的用法。

strftime不那样用又怎样用呢??


鸟蛋开始孵化。。。我等待那一天Forever。。
2007-11-08 15:20
单调黑白
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-10-4
得分:0 
回复:(单调黑白)这是SUN公司的一道改错的题!请大家...

谢谢大家的踊跃发言!
我也分析出来了一些错误,但还是不全,最后是由本论坛"yijing21"给出了最好的答案 他的修改如下:

//LF_DateTime.h

class CLF_DateTime
{
private:
struct tm *local;
//time_t t;
// char str[80];
public:
CLF_DateTime(int year, int month, int day,int hour, int min,int sec);
~CLF_DateTime(void);
void display(char * strdisplay);
};


//LF_DateTime.cpp


#include <time.h>
#include <iostream>

using namespace std;

CLF_DateTime::CLF_DateTime(int year, int month, int day,int hour, int min,int sec)
{
local = new tm;
local->tm_year = year-1900;//tm_year是从1900年起开始计算 也就是说他显示2007时tm_year值并不是2007
local->tm_mon = month-1;//月份可见definition里有说明是[0,11]所以比现实小了一个月
local->tm_mday = day;
local->tm_hour =hour;
local->tm_min =min;
local->tm_sec =sec;

}

CLF_DateTime::~CLF_DateTime(void)
{
delete(local);
}

void CLF_DateTime::display(char * strdisplay)
{

strftime(strdisplay,80,"%Y-%m-%d %H:%M:%S",local);//这里并未用到str[80]
cout<<strdisplay<<endl;


}

int main()
{
CLF_DateTime *pa;
char testdisplay[100];


pa = new CLF_DateTime(2005,10,01,11,50,35);
pa->display(testdisplay);
//cout<<testdisplay<<endl;//重复输出

return 0;
}

大家继续往下看:
此题到此并未完,这只是第一步!
接下来的要求:
1.尝试把时间精确到微秒.
2.将存储的日期时间 四舍五入精确的分钟.for exemple:"2005-10-01 11:51:00.0000".
3.对比存储的日期时间和四舍五入后的日期时间,舍存储的日期时间(a),四舍五入后的日期时间(b)
Results:
(a>b,result=1)
(a=b,result=0)
(a<b,result=-1)

至此,此题完全解完!(要求要在原题的基础上做修改)

请大家继续关注此题并踊跃发言!谢谢!



雕刻单调的人生
2007-11-08 15:35
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 

4楼我说的不对,

详细的时间函数用法参看这里:
http://www.cppblog.com/bourne/archive/2006/07/05/9423.aspx


Fight  to win  or  die...
2007-11-08 15:54
圆圆的鸟蛋
Rank: 1
等 级:新手上路
帖 子:216
专家分:0
注 册:2007-4-22
得分:0 
以下是引用单调黑白在2007-11-8 15:35:24的发言:

谢谢大家的踊跃发言!
我也分析出来了一些错误,但还是不全,最后是由本论坛"yijing21"给出了最好的答案 他的修改如下:

void CLF_DateTime::display(char * strdisplay)
{

strftime(strdisplay,80,"%Y-%m-%d %H:%M:%S",local);//这里并未用到str[80]
cout<<strdisplay<<endl;
}

为什么未用到str[80]呢??这个好像没道理吧!!只要把1楼那个代码中str*改成str就可以了(成员函数也要改)
结果如下:
#include <time.h>
#include <iostream>
using namespace std;

class CLF_DateTime
{
private:
struct tm *local;
time_t t;
char str[80];
public:
CLF_DateTime(int year, int month, int day,int hour, int min,int sec);
~CLF_DateTime();
void display();
};

CLF_DateTime::CLF_DateTime(int year, int month, int day,int hour, int min,int sec)
{
local = new tm;
local->tm_year = year-1900;
local->tm_mon = month;
local->tm_mday = day;
local->tm_hour =hour;
local->tm_min =min;
local->tm_sec =sec;

}

CLF_DateTime::~CLF_DateTime(void)
{
delete(local);
}

void CLF_DateTime::display()
{

strftime(str,80,"%Y-%m-%d %H:%M:%S",local);
cout<<"Your input time is:"<<str<<endl;
}
int main()
{

CLF_DateTime str(2005,10 ,01 , 11,50,23);

str.display();

return 0;
}


结果是一样的。。只是没搞懂获取的是什么时间

[此贴子已经被作者于2007-11-8 20:51:36编辑过]


鸟蛋开始孵化。。。我等待那一天Forever。。
2007-11-08 16:19
yijing21
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-11-7
得分:0 
要把时间精确到微秒级?不用MFC可以吗?简单得方法?愿闻其详~~
2007-11-08 18:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-184447-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.298693 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved