/*
*copyright (c) 2016,烟台大学计算机学院
*All rights reserved.
*文件名称:hellow.cpp
*作者:田甜
*完成日期:2016年3月31日
*版本号:v1.0
*
*问题描述:构造时间类
*输入描述:输入时、分、秒
*程序输出:修改后的时间
*/
问题及代码:
#include <iostream>
using namespace std;
class Time
{
public:
void set_time();
void show_time();
void add_a_sec()
{
if(isTime(sec,minute,hour))
sec++;
if(sec>=60)
{
add_a_sec();
sec=0;
}
}
void add_a_min()
{
if(isTime(sec,minute,hour))
minute++;
if(minute>=60)
{
add_a_hour();
minute=0;
}
}
void add_a_hour()
{
if(isTime(sec,minute,hour))
hour++;
if(hour>=24)
hour=0;
}
private:
bool isTime(int a,int b,int c);
int sec,minute,hour;
};
bool Time::isTime(int a,int b,int c)
{
if(a<0||a>=60||b<0||b>=60||c<0||c>=60)
return false;
return true;
}
void Time::set_time()
{
char c1,c2;
cout<<"请输入时间(格式:hh:mm:ss):";
while(1)
{
cin>>hour>>c1>>minute>>c2>>sec;
if(c1!=':'||c2!=':')
cout<<"格式错误,重新输入。"<<endl;
if(!isTime(hour,minute,sec))
cout<<"时间非法,重新输入。"<<endl;
else break;
}
}
void Time::show_time()
{
cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
int main()
{
Time t1;
t1.set_time();
t1.add_a_sec();
t1.add_a_min();
t1.add_a_hour();
t1.show_time();
return 0;
}
运行结果:
错误分析:
在调用函数add_a_sec()后已经通过嵌套调用得到了结果0:0:0
后面的两句调用函数add_a_min add_a_hour 反而使min和hour 再次加1造成了错误