Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DanielPy en 21 Abril 2015, 18:25 pm



Título: fechas guardadas en variables char validar ">=, <="
Publicado por: DanielPy en 21 Abril 2015, 18:25 pm
Hola a todos.
¿Hay otra manera más práctica para hacer esto?, lo que se me antoja es separar día, mes y año castearlo a int y luego compararlas una a una.-
Dejo la función por si desean hacerme alguna observación.-

Código
  1. void consultation(FILE *ptrFile, Super *super, int tamStructSuper){
  2. char fechaIni[11], fechaFin[11], *p = NULL;
  3. int ch, ok;
  4. float totalPar = 0.0, totalCon = 0.0;
  5.  
  6. do{
  7. printf( "\n\n Ingrese INICIO de la consulta (formato ==> 11/04/2015)....: " );
  8. fgets(fechaIni, 11, stdin);
  9. if((p=strchr(fechaIni, '\n'))){
  10. *p='\0';
  11. }
  12. else{
  13. while((ch = getchar()) !='\n' && ch!=EOF);
  14. }
  15. ok = strlen(fechaIni);
  16. if( ok != 10 || fechaIni[2] != '/' || fechaIni[5] != '/'){
  17. ok = 0;
  18. }
  19. }while(!ok);
  20.  
  21. do{
  22. printf( "\n\n Ingrese FINAL de la consulta (formato ==> 11/04/2015).....: " );
  23. fgets(fechaFin, 11, stdin);
  24. if((p=strchr(fechaFin, '\n'))){
  25. *p='\0';
  26. }
  27. else{
  28. while((ch = getchar()) !='\n' && ch!=EOF);
  29. }
  30. ok = strlen(fechaFin);
  31. if( ok != 10 || fechaFin[2] != '/' || fechaFin[5] != '/'){
  32. ok = 0;
  33. }
  34. }while(!ok);
  35.  
  36. printf( "\n\n =======================================================" );
  37. printf( " \n\n Fecha        Verduler%ca    Almac%cn     Total", 161, 130 );
  38.  
  39. ok=0;
  40. rewind( ptrFile);
  41. while( fread( super, tamStructSuper, 1, ptrFile ) == 1 ){
  42. if( super->fecha >= fechaIni && super->fecha <= fechaFin ){
  43. ok++;
  44. totalPar = super->verduras + super->almacen;
  45. totalCon += totalPar;  
  46. printf( "\n%11s %12.2f %10.2f %9.2f", super->fecha,  super->verduras, super->almacen, totalPar);
  47. }
  48. }
  49. if( ok > 0 ){
  50. printf( "\n\n Total de la consulta.................$ %.2f", totalCon );
  51. }else{
  52. printf( "\n\n No  hay movimientos entre el %s al %s", fechaIni, fechaFin );
  53. }
  54. MENSAJE;
  55.  
  56. }
  57.  
Saludos.
Daniel


Título: Re: fechas guardadas en variables char validar ">=, <="
Publicado por: ivancea96 en 21 Abril 2015, 21:39 pm
¿Forma más práctica? Puedes hacer una estructura donde almacenar las fechas por partes, y hacer funciones acordes a esa estructura.


Título: Re: fechas guardadas en variables char validar ">=, <="
Publicado por: DanielPy en 21 Abril 2015, 22:47 pm
Hola ivancea96.
Gracias por ocuparte, lo que me propones es interesante sólo que antes lo voy a intentar de esta manera y veré que resulta.-

a = 30/01/2015 
b = 01/02/2015

Ahora mismo tengo un barullo respetable para validar por ej. a[9] con b[9] cuando llegue a a[6] y b[6] sabré si el año es igual o distinto y luego continuar con el mes y si es igual continuar con el día.-
     
Saludos.
Daniel


Título: Re: fechas guardadas en variables char validar ">=, <="
Publicado por: ivancea96 en 22 Abril 2015, 11:18 am
Ese es el problema, que trabajar con char* no es tan intuitivo como trabajar con enteros. Creando una estructura podrás hacer comprobaciones simples.


Título: Re: fechas guardadas en variables char validar ">=, <="
Publicado por: DanielPy en 22 Abril 2015, 18:29 pm
Hola.
Tienes toda la razón, lo que pasa es que cuando uno está estudiando por querer reinventar la rueda o por desconocimiento cometemos esos errores.
Estoy haciendo la función para validar las fechas para la consulta, como hasta el momento tengo muchos if ni bien funcione la voy a exponer para que me digas (si lo deseas) como puedo optimizarla.-
   
Saludos.
Daniel


Título: Re: fechas guardadas en variables char validar ">=, <="
Publicado por: DanielPy en 22 Abril 2015, 20:35 pm
Hola.
Al fin encontré la solución y puedo continuar sin pérdidas de tiempo, no pongo el código porque lo encontré en otro foro y desconozco si se puede, sería interesante volcarlo aquí porque es muy conciso, unas pocas líneas, aclaro que lo digo para los que estamos estudiando porque todos los expertos de este foro seguramente lo conocen, de echo los autores son rir3760 y vangodp.- ;-) ;-) ;-)     
   
Saludos.
Daniel