2014-12-03 2 views
1

привет Я пытаюсь рассчитать день рождения человека, используя дни входа пользователей. Я немного новичок в библиотеке ctime, но я придумал разницу между двумя датами, чтобы получить количество дней. Насколько мне известно, у меня есть ctime; Я знаю, что ctime имеет встроенную структуру tm, состоящую из min, secs, hour, day, month и year. Я попытался использовать asctime, чтобы поместить их в отдельных, но это сделало мою логику более запутанной. что я использую difftime, чтобы найти разницу между датами. Как так:расчет дня рождения в зависимости от количества дней ввода пользователем

struct tm a = { 0, 0, 0, 1, 1, 91 }; /* my birthday */ 
struct tm b = { 0, 0, 0, 3, 11, 114 }; /* today's date */ 
time_t x = mktime(&a); 
time_t y = mktime(&b); 
if (x != (time_t)(-1) && y != (time_t)(-1)) 
{ 
    double days = difftime(y, x)/(60 * 60 * 24); 
    cout << ctime(&x); 
    cout << ctime(&y); 
    cout << "difference = " << days << " days" << endl; 
} 

Выход есть: differnce = 8706 дней

Проблема заключается в том, что пользователи входы 8706 дней, чтобы получить свой день рождения или свой день рождения. Этот код обратный, если это имеет смысл. Можете ли вы помочь мне разобраться в логике решения проблемы.

ответ

0

Я не получил то, что вы действительно хотите, но если вы попытаетесь позволить пользователю ввести количество дней, и вы получите его день рождения, это просто, просто напишите struct tm a = {0, 0, 0, a, До нашей эры};/* мой день рождения */ и если количество дней составляет 8706 int c = 8706/365; // наибольший делитель должен дать u 23 , и вы получите оставшиеся int temp = 23 * 365 = 8395; , а затем вы сделаете int Осталось = 8706-8395 = 311; и продолжайте искать месяцы и дни .. Надеюсь, это ваш вопрос.

+0

это немного, может быть, я не просил более подробно, но им ищет помощь; допустим, пользователь вводит количество дней с момента рождения, он должен выдать пользователям день рождения с сегодняшнего дня –

+0

#include #include using namespace std; void main() { \t int days, day, month, year; \t cout << "Сколько вам лет?" Endl; \t cin >> days; \t год = дни/365; \t \t int Остальные = дни- (год * 365); \t \t месяц = ​​остальные/30; \t \t Остальные = оставшиеся (месяц * 30); \t \t день = остаток; \t struct tm a = {0, 0, 0, 3-day, 11-month, 114-year};/* мой день рождения */ \t struct tm b = {0, 0, 0, 3, 11, 114};/* Текущая дата */ \t time_t х = указываете ей (&a); \t time_t у = указываете ей (&b); \t \t соиЬ << CTime (&x); \t \t соиЬ << CTime (&y); \t \t } может быть, этот код будет help и u можете использовать a.tmday и b.tmyear и т. д. – yazan

+0

спасибо большое, это было именно то, что мне нужно –

0

Если вы можете использовать Boost:

#include <iostream> 
#include "boost/date_time/gregorian/gregorian.hpp" 

using namespace std; 
using namespace boost::gregorian; 

int main(){ 
    days d; 
    cin >> d; 
    date today = day_clock::local_day(); 
    date birth = today - d; 
    date bday(today.year(), birth.month(), birth.day()); 
    if(bday < today) bday = date(today.year()+1, birth.month(), birth.day()); 
    cout << bday; 
} 
+0

имел проблемы с доступом к библиотеке boost, я все время получаю сообщение об ошибке, говорящее, что он не может открыть источник –

+0

Boost не является частью стандартной библиотеки. загрузите его и добавьте в качестве пути включения во время компиляции (флаг -I (верхний регистр «i»), если вы используете gcc).Подробнее здесь: http://www.boost.org/doc/libs/1_57_0/more/getting_started/index.html –

Смежные вопросы