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
Estamos encantados de ayudarte... lo único que se te ha olvidado poner tu código y decir dónde te has atascado
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);
}
}
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.
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