Вообщем, ввожу данные 1-й даты и 2-й даты и пытаюсь найти разницу между ними в днях, решил для начала найти разницу в днях в месяцах и годах, месяцы и годы перевожу в дни и все суммирую, но кол-во месяцев не подсчитывает
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int year_user, mon_user, day_user;
int current_year, current_mon, current_day;
int num_days, num_mon=0, num_years;
int leap_year = 0, leap_like = 0;
int m, m1, i, j;
int M[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
cout<<"Введите год месяц и день вашего дня рождения(в формате ГГГГ М Д):"<<endl;
cin>>year_user>>mon_user>>day_user;
cout<<"Ваша дата рождения:"<<year_user<<"."<<mon_user<<"."<<day_user<<endl;
cout<<"Введите желаему дату для вычесления количество дней(в формате ГГГГ М Д):"<<endl;
cin>>current_year>>current_mon>>current_day;
cout<<"Желаемая дата:"<<current_year<<"."<<current_mon<<"."<<current_day<<endl;
//рассчитываем количество лишних дней
num_days = day_user - current_day;
num_days = abs(num_days);
cout<<"Количество дней между датами:"<<num_days<<endl;
//проверяем какой из месяцев больше для корректной работы(ПРОБЛЕМА)
if (mon_user >= current_mon)
{
int m = mon_user;
int m1 = current_mon;
}
else
{
int m = current_mon;
int m1 = mon_user;
}
//рассчитываем количество лишних месяцев
for(i=m; i<m1; i++)
{
num_mon += M[i-1];
}
cout<<"Количество дней между месяцами:"<<num_mon<<endl;
//рассчитываем количество лет между датами и проверяем высокосный ли он
for(j=year_user; j<current_year; j++)
{
if((j%4 == 0 && j%100 != 0) || (j%400 == 0))
{
num_years += 366;
}
else
{
num_years += 365;
}
}
cout<<"Количество дней между годами:"<<num_years<<endl;
return 0;
}
Я бы не мучил эти дни, месяцы и годы... Есть такое хорошее понятие как юлианская дата с хорошо разработанным алгоритмом расчета, и ваша задача - просто вычисление разности двух таких дат.
Если вы не планируете работать с датами до введения григорианского календаря и учитывать введение в России григорианского в 1918 году :), то вам достаточно запрограммировать это:
Как видите, даже ни одного условного перехода :)
Чтобы найти возраст в днях, можно готовую библиотеку использовать, к примеру, date.h для C++11/c++14:
#include <iostream>
#include "date.h"
int main()
{
using namespace date;
sys_days birthday;
if(!(std::cin >> parse("%Y %m %d", birthday)))
return 1; // error
sys_days today = floor<days>(std::chrono::system_clock::now());
std::cout << (today - birthday).count() << std::endl;
}
Пример:
$ g++ -std=c++14 -I/path/to/date *.cc
$ echo 1982 6 25 | ./a.out
12864
Вот пример, который принимает во внимание время дня.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть class содержимым является цена на товар 2 040,00 есть кнопка при нажатии на неё цена меняется
Как разбить массив на части? есть код который сохраняет данные с чекбокс:
Всем доброго времени сутокПодскажите пожалуйста столкнулся с такой задачей, есть плагин графиков на js в нем есть такие массивы с данными: