ayuda fecha en c

Iniciado por J.cE, 20 Febrero 2014, 18:51 PM

0 Miembros y 1 Visitante están viendo este tema.

J.cE

como estan compañeros, soy nuevo en esta camunidad y me ha sido de mucha ayuda, quisiera que me ayuden con este problema que tengo en un programa para que una fecha ingresada por el usuario si es mayor en 15 dias a la fecha actual y menor a 30 dias de la fecha actual sea aceptada; la fecha actual es tomada de time.h , espero me puedan ayudar con esto 

eferion

Estamos encantados de ayudarte... lo único que se te ha olvidado poner tu código y decir dónde te has atascado

J.cE

s: es un archivo donde se guardaran los datos, r: es un registro tipo solicitud, f: es donde estan guardos los varoles de time.h para la fecha del computador.


void nueva_solicitud(FILE *s, solicitud *r_sol, tm *f)
{
int correcto;

s=fopen("solicitudes.dat","a");
if(s==NULL)
puts("ERROR al abrir el archivo solicitudes.dat");
else
{
correcto=0;
puts("ingrese fecha de ida Ejm: dia-mes-año");
do
{
scanf("%d%*c%d%*c%d",&r_sol->d_i, &r_sol->m_i, &r_sol->a_i);
                        /*aqui es donde viene la comprobacion si la fecha ingresada es mayor en 15 y menor que 30 dias apartir de la fecha actual*/
                       /*la fecha actual es tomada de: f->tm_mday, f->tm_mon, f->tm_year;*/
                       /*si la fecha ingresada es correcta entonces correcto se hace verdadero (correcto=1)*/
if(!correcto)
puts("la fecha no es correcta");
}
while(!correcto);
}
}

Gh057

hola J.cE deberías implementar un algoritmo sencillo por vos aunque sea de manera local, cuando funcione, modificas tus estructuras para que tomen los datos desde otro archivo. saludos.
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

rir3760

Cita de: J.cE en 20 Febrero 2014, 18:51 PMquisiera que me ayuden con este problema que tengo en un programa para que una fecha ingresada por el usuario si es mayor en 15 dias a la fecha actual y menor a 30 dias de la fecha actual sea aceptada; la fecha actual es tomada de time.h , espero me puedan ayudar con esto
Para obtener la fecha N días antes o después de la actual los pasos son, utilizando las facilidades de la biblioteca estándar de C:

1) Obtienes la fecha actual con la función time.
2) En base al objeto de tipo time_t obtienes uno de tipo "struct tm" mediante la función localtime o gmtime.
3) Incrementas el valor del campo tm_mon.
4) Reajustas los valores mediante la función mktime.

Un ejemplo sencillo:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
   struct tm a = {0};
   struct tm b = {0};
   time_t now;
   
   now = time(NULL);
   a = b = *localtime(&now);
   
   a.tm_mday -= 54;
   mktime(&a);
   printf("-54 ==> %4d/%02d/%02d\n",
      a.tm_year + 1900, a.tm_mon + 1, a.tm_mday);
   
   printf("Now ==> %4d/%02d/%02d\n",
      b.tm_year + 1900, b.tm_mon + 1, b.tm_mday);
   
   b.tm_mday += 15;
   mktime(&b);
   printf("+15 ==> %4d/%02d/%02d\n",
      b.tm_year + 1900, b.tm_mon + 1, b.tm_mday);
   
   return EXIT_SUCCESS;
}


Y su salida (al día de hoy) es:
-54 ==> 2013/12/31
Now ==> 2014/02/23
+15 ==> 2014/03/10


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language