2017-04-13 131 views
0

该计划的主要目标是能够向用户询问的日期,例如他们的生日,然后输出日子里,他们还活着的量。计算天数的烦恼

所以,我认为我遇到了这里的主要问题是试图找出如何让程序知道有多少天是在一个月内和一年做到这一点。

我要求当天,月和年在数字格式的用户(例如1 1 2000年)

现在当你从betweenYear,betweenDay和betweenMonth其添加的结果只给了我有关40天的时间取决于我放入的年份,实际上它应该是成千上万。我知道这是因为当向用户询问这些信息时,程序不知道这些是实际日期,而只是数字。我不知道如何获取用户信息,并将它们变成程序中的实际日期而不是简单的整数

所以我的问题是:如何定义一个月中的天数和一年中的天数仍然使用用户输入的号码。

。我只会把代码,我认为部分是必要的。 (我仍然很新的这一点,我已经做了很多研究,但发现是非常简单,我理解的例子已经失败。)

int main() 
{ 
    cout << "Please Enter the day you were born. (EX 1-31) "; 
    cin >> day; 

    cout << "Please Enter the month you were born. (EX 1-12) "; 
    cin >> month; 

    cout << "Please Enter the year you were born. (EX 1990)"; 
    cin >> year; 

    time_t t = time(NULL); 
    tm* timePtr = localtime(&t); 

    betweenYear = (timePtr->tm_year + 1900) - year; 
    betweenDay = timePtr->tm_mday - day; 
    betweenMonth = timePtr->tm_mon - month; 
+0

什么是你的代码错误? – chbchb55

+0

@ chbchb55将年,月之间和月之间的结果相加。它只有35天,如果用户在90年代初期输入日期,它应该是千分之一 – NosVader

+0

您需要将年份延长到几天以及几个月,所以通常像年份那样扩展它们(365 *之间)+((年 - (年至4月)之间)/ 4)'和类似的东西 – chbchb55

回答

0

您需要展开年后日内还有个第一,所以只是正常展开它们就像几年将是365 * betweenYear,你不得不在一天额外增加对每一个闰年所以像(365*betweenYear)+((betweenYear-(betweenYear%4))/4)和几个月试图通过他们,用你的循环这一想法像days += (month_number-(month_number <= 7 ? 1 : 0)) % 2 && month_number != 2 ? 30 : month_number == 2 ? year_number % 4 == 0 ? 29 : 28 : 31;

这里是扩展形式的三元:

int tmp_month = month_number; 
if (month_number <= 7) { 
    tmp_month -= 1; 
} 
if (tmp_month % 2 && month_number != 2) { 
    days += 30; 
} else if (month_number == 2) { 
    if (year_number % 4 == 0) { 
     days += 29; 
    } else { 
     days += 28; 
    } 
} else { 
    days += 31; 
} 
1

我会建议使用标准库来处理时间相关的问题。

#include <ctime> 

using namespace std; 

const long long SECONDS_PER_DAY = 3600L * 24L; 

long long days_since(int year, int month, int day) { 
    // Current time since epoch 
    time_t now = time(nullptr); 

    // Convert year, month and day to a tm object 
    tm beg = *localtime(&now); 
    beg.tm_year = year - 1900; 
    beg.tm_mon = month - 1; 
    beg.tm_mday = day; 

    // difftime returns seconds 
    time_t bd = mktime(&beg); 
    return static_cast<long long>(difftime(now, bd))/SECONDS_PER_DAY; 
} 
+0

我在最终的代码中做过。我把我所有的库和命名空间的东西放在这里发布的代码中,以缩短它。 – NosVader