我有这个程序的小问题。我正在尝试创建一个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; }
如果您提供了一些结果正确和不正确的情况,这将有助于追踪问题。如果您能够找到计算器出现故障的情况的模式,则应该很容易找出不正确的逻辑部分。不看代码,你是否跟踪你只需要添加闰日,如果这一天在该范围内? (仅仅知道它发生的那一年是不够的,而不管它是在出生日期和当前日期之后 –