if控制满足条件不执行(在有注解的地方)

hahaysw 2008-03-13 08:39:36
#include<iostream.h>
#ifndef TIME_H
#define TIME_H
class Time{
public:
Time(int =0,int =0,int =0,int =0,int =0,int =0);
void settime(int,int,int,int,int,int);
void sethour(int);
void setminute(int);
void setsecond(int);
int gethour();
int getminute();
int getsecond();
void printstandard();
void nextday();
void date();
private:
int hour;
int minute;
int second;
int month;
int day;
int year;
};
#endif

#include <iostream.h>
#include"time.h"
Time::Time(int hr,int min,int sec,int m,int d,int y)
{settime(hr,min,sec,m,d,y);}
void Time::settime(int h,int m,int s,int ma,int da,int ye)
{
sethour(h);
setminute(m);
setsecond(s);
month=(ma>=1&&ma<=12)?ma:1;
day=(da>=1&&da<=30)?da:1;
year=ye;
}
void Time::sethour(int h)
{hour=(h>=0&&h<24)?h:0;}
void Time::setminute(int m)
{minute=(m>=0&&m<60)?m:0;}
void Time::setsecond(int s)
{second=(s>=0&&s<60)?s:0;}
int Time::gethour(){return hour;}
int Time::getminute(){return minute;}
int Time::getsecond(){return second;}
void Time::printstandard()
{
cout<<((hour==0||hour==12)?12:hour%12)
<<":"<<(minute<10?"0":"")<<minute
<<":"<<(second<10?"0":"")<<second
<<(hour<12?"AM":"PM")<<endl;
}
void Time::date()
{cout<<month<<'-'<<day<<'-'<<year<<endl;}
void tick(Time &,int);
int main()
{
Time t;
t.settime(12,59,58,12,30,1999);
tick(t,3);
return 0;
}
void tick(Time &tt,int count)
{
cout<<"tick second "<<count
<<" time:\nstart time: ";
tt.printstandard();
for(int i=0;i <count;i++)
{
tt.setsecond((tt.getsecond()+1)%60);
if(tt.getsecond()==0)
tt.setminute((tt.getminute()+1)%60);
if(tt.getminute()==0&&tt.getsecond()==0)
tt.sethour((tt.gethour()+1)%24);
if(tt.getminute==0&&tt.gethour()==1&&tt.getsecond()==0)//就是这行,如果只是getsecond()==0,日月年可以变,
//但是像上面那样3个一起就不行了。但是输出表明时间都变了,但是就是调用不了tt.nextday(),不清楚为什么。
tt.nextday();
tt.date();
cout<<"\nsecond+1: ";
tt.printstandard();
}
cout <<endl;
}
void Time::nextday()
{
day++;
if(day>=30)
{
month++;
day=1;
}
if(month>=12)
{
month=1;
year++;
}
}
...全文
144 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mimong_lin 2008-03-14
  • 打赏
  • 举报
回复
如果没理解错的话,你的程序代码是要求24小时制的,再看你给的时间,
t.settime(12,59,58,12,30,1999);
1999年12月30日12点59分58秒.只是加了3秒,怎么会影响到日期变化呢?只不过是到了13点.

或者你应该将12点改成23点,就是你想要的日期变化了.
雨沐辉 2008-03-14
  • 打赏
  • 举报
回复
首先同意楼上的,函数少写括号.

还有,如果不是这个括号的问题,你去考虑下&&和==的优先级问题.
ryfdizuo 2008-03-14
  • 打赏
  • 举报
回复
if(tt.getminute==0&&tt.gethour()==1&&tt.getsecond()==0)
//就是这行,如果只是getsecond()==0,日月年可以变,
你这里getminute函数后面少了括号了啊,
相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-03-13 08:39
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下