【发布时间】:2016-10-09 19:18:06
【问题描述】:
我是一名学生,我想知道是否有人可以帮助我调试我的一个函数。对于这个程序,假设用户在 1972-2071 年之间以 mm/dd/yy 格式输入两个日期,并且程序假设输出这两个日期之间的差异。除了计算 72 年 1 月 1 日的天数的函数外,我所有的函数都可以工作。这是我们的教授希望我们在没有额外功能的情况下这样做的方式。只是一个包含大量 if else 语句和 for 循环的初学者版本。
int ChangeToNumber(int m, int d, int y)
{
int total=0;
if(y<=71) //if the year is between 2000-2071
{
y+=28;
for(int i=0; i<y; i++)
{
if(!LeapYear(y))
{
total+=365;
}
else
{
total+=366;
}
}
}
else //if the year is between 1972-1999
{
for(int i=72; i<y; i++)
{
if(!LeapYear(y))
{
total+=365;
}
else
{
total+=366;
}
}
}
for(int i=1; i<m; i++)
{
total+=DaysInMonth(m, y);
}
total += d;
return total;
}
【问题讨论】:
-
您需要添加更完整的代码示例。例如
LeapYear和DaysInMonth这两个方法读者不知道 -
Cheap hack:
(year + 28) %100将为您省去一些麻烦和代码重复 -
#include <chrono> -
由于 d 在整个函数中根本没有改变,但是返回值需要它,所以你首先要做的就是设置 total 等于 d。您还应该将年份表示为 4 位数,而不是 2。将 28 添加到低于或等于 71 的值是一种非常老套的做事方式,并且会降低代码的可读性。另一种计算年份的方法是简单地计算 y - 1972。
标签: c++