我有這個程序的小問題。我正在嘗試創建一個C++程序來計算一個人的生活天數。它接受三個稱爲月,日和年的參數。這是該計劃背後的整個邏輯:天計算器不總是產生準確的結果
首先計算今天的日期和保存到三個變量稱爲天,月,年,並尋找當年差
假設一年差爲10,計算9年的天數乘以365.
假設輸入月份爲5,則計算4個月內的天數並添加相應天數,並將結果值添加到總天數中。
計算從輸入年份到當前年份的閏年數並將該值添加到總天數中。
最終的輸出是由函數返回的,但是在某些日期我得到了輕微的錯誤。輸出並不總是準確的。任何幫助將不勝感激。下面 是整個代碼:
#include <iostream> #include <ctime> #include <cmath> #include <vector> using namespace std; bool IsLeap(int); int LeapCount(int); int current_year; int calculator(int month, int day, int year); int main() { cout << calculator(9,24,1994); } int calculator(int month, int day, int year) { int final_result; int day_difference; int total_days = 0; const int days_inayear = 365; vector <int> m_days = {31,28,31,30,31,30,31,31,30,31,30,31}; time_t theTime = time(NULL); struct tm *aTime = localtime(&theTime); int current_day = aTime->tm_mday; int current_month = aTime->tm_mon + 1; current_year = aTime->tm_year + 1900; if(year > current_year){ return 0; } else if (year == current_year && month > current_month){ return 0; } else if(year == current_year && month == current_month && day > current_day){ return 0; } else if(year == current_year &&month == current_month && day <= current_day){ return abs(current_day - day); }else { int year_difference = current_year - year; int day_difference = abs(current_day - day); for(int a = month+1; a < m_days.size(); a++){ total_days+= m_days[a]; } int leap_years = LeapCount(year); total_days+=(year_difference)*days_inayear; if(year_difference <= 1 && month < 2){ leap_years -= 2; } final_result = total_days+leap_years+day_difference; if(IsLeap(year) && month > 2){ final_result = final_result; } return final_result; } } bool IsLeap(int year) { if(year%4 == 0 && year%100!=0){ return true; } else if(year%4==0 && year%100==0 && year%400==0){ return true; } else{ return false; } } int LeapCount(int year) { int difference = current_year - year; int count = 0; for(int x = 0; x<=difference; x++){ if(IsLeap(year+x)){ count++; } } return count; }
如果您提供了一些結果正確和不正確的情況,這將有助於追蹤問題。如果您能夠找到計算器出現故障的情況的模式,則應該很容易找出不正確的邏輯部分。不看代碼,你是否跟蹤你只需要添加閏日,如果這一天在該範圍內? (僅僅知道它發生的那一年是不夠的,而不管它是在出生日期和當前日期之後 –