2017-04-13 132 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