tiagoalves Posted December 12, 2012 Report Share Posted December 12, 2012 Olá, perciso de ajudar, como fazemos a substração de uma data, não sei se há alguma forma de fazer isto. Agradeço a voces, que me puderem ajudar. int dtinicio, dtfim, dia_total; printf("Data de aluguer\n"); scanf("%d", &dtinicio); printf("Data entrega\n"); scanf("%d", &dtfim); dia_total = dtfim-dtinicio; Abraços. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted December 12, 2012 Report Share Posted December 12, 2012 o que é para ti uma data ? achas que um inteiro é suficiente para codificar ano/mes/dia ? ps : sim é suficiente, mas consegues manipular uma codificação dessas ? pensa primeiro como poderias guardar a informação da data em algum tipo de dados IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
apocsantos Posted December 12, 2012 Report Share Posted December 12, 2012 Boa tarde, Da maneira que estás a fazer não me parece que vá dar resultado... Porque não lês separadamente as "3 componentes" de uma data (dia, mês, ano), e fazes as operações a seguir ?? Aqui fica uma dica: int ddinicio, dminicio, dainicio, ddfim, dmfim, dafim, dia_total, dtd, dtm, dta; do { printf("Data de aluguer no seguinte formado: dia mês ano ddmmyy\n"); } while (scanf("%d %d %d %d", &ddinicio, &dminicio, &dainicio)!=3); Cordiais cumprimentos, Apocsantos "A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito" Link to comment Share on other sites More sharing options...
tiagoalves Posted December 12, 2012 Author Report Share Posted December 12, 2012 Obrigado HappyHippyHippo e ApocSantos, A minha intenção é esta; Queria substrair a data de inicio e datafim, e ele me devolva total em dias, por exemplo(dt inicio=2012-12-12, dtfim= 2012-12-14, e ele me devolve 2 dias), int valdata(char *data) { int ano = 0, mes = 0, dia = 0; char mesExt[20], meses[][4] = {"jan", "fev", "mar", "abr", "mai", "jun", "jul", "ago", "set", "out", "nov", "dez"}; int i; // obtenção dos componentes da data if(sscanf(data, "%d %s %d", &dia, mesExt, &ano)== 3) { // 25 Dez 2007 mesExt[3] = '\0'; i = 0; while(mesExt[i] = tolower(mesExt[i++])); // conversao do mes para caracteres minusculos for(i=0; i < 12; i++) if(strstr(mesExt, meses[i])) { mes = i+1; break; // identifica o mês como numérico } if((mes == 0) && (i = 12)) // não encontrou o mês return 0; } else if(sscanf(data, "%d/%d/%d", &ano, &mes, &dia) != 3) // 2007/12/25 if(sscanf(data, "%d-%d-%d", &ano, &mes, &dia) != 3) // 2007-12-25 return 0; // validação da data if((ano < 1590) || (ano > 9999)) // ano no calendário gregoriano return 0; if((mes < 1) || (mes > 12)) // mês inválido return 0; if((dia < 1) || (dia > 28)) // casos particulares dos dias switch(mes) { // dos meses case 2: if(!((!(ano%4) && (ano%100)) || !(ano%400)) || dia > 29) return 0; case 4: case 6: case 9: case 11: if(dia > 30) return 0; default: if(dia > 31) return 0; } return (ano * 10000 + mes * 100 + dia); } void val_pagar(char dtaluguer, float prec, char dtentrega, int dia_total, float preco) { char *data; printf("Preco por dia"); scanf("%f", &prec); do{ printf("Data de aluguer\n"); scanf("%c", &fdtaluguer); }while(.dtaluguer==valdata(data)==0); do{ printf("Data entrega\n"); scanf("%c", &dtentrega); }while((dtentrega==valdata(data)==0) && (dtentrega<= fdtaluguer)); dia_total = dtentrega - dtaluguer; preco = prec * dia_total; } Obrigado Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted December 12, 2012 Report Share Posted December 12, 2012 #include <time.h> struct tm time1, time2; time_t time_int_1, time_int_2; double diff; memset(&time1, 0, sizeof(struct tm)); memset(&time2, 0, sizeof(struct tm)); time1.tm_year = ano1 - 1900; time1.tm_mon = mes1 - 1; time1.tm_mday = dia1; time_int_1 = mktime(&time1); time2.tm_year = ano2 - 1900; time2.tm_mon = mes2 - 1; time2.tm_mday = dia2; time_int_2 = mktime(&time2); diff = diffdate(time_int_2, time_int_1); printf("diferenca em segundos : %lf\n", diff); printf("diferenca em dias : %lf\n", diff/3600); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now