elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Necesito ayuda para poner una fecha limite o fecha final a mi programa para mi bloc de notas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Necesito ayuda para poner una fecha limite o fecha final a mi programa para mi bloc de notas  (Leído 6,339 veces)
Alex1209

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Necesito ayuda para poner una fecha limite o fecha final a mi programa para mi bloc de notas
« en: 15 Diciembre 2020, 05:18 am »

Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<string.h>
  4. #include<stdlib.h>
  5. #include<unistd.h>
  6.  
  7. int opc;
  8.  
  9. void CrearBlocDeNotas();
  10. void BuscarBlocDeNotasL();
  11. void AbrirBlocDeNotasE();
  12.  
  13. //PROGRAMA PRINCIPAL
  14. void main(){
  15.  
  16.  
  17. do{
  18. system("cls");
  19. printf("                ---Menu Principal de Easy Take List---\n");
  20. printf("1.-Crear Nuevo Bloc de Notas\n");
  21. printf("2.-Buscar Bloc de Notas\n");
  22. printf("3.-Abrir Bloc de Notas\n");
  23. printf("4.-Salir\n");
  24. printf("Eliga una opcion: ");
  25. scanf("%d",&opc);
  26. fflush(stdin);
  27. switch(opc){
  28. case 1:
  29. CrearBlocDeNotas();
  30. break;
  31. case 2:
  32. BuscarBlocDeNotasL();
  33. break;
  34. case 3:
  35. AbrirBlocDeNotasE();
  36. break;
  37. }
  38. }while(opc != 4);
  39. system("cls");
  40. }
  41.  
  42. //FUNCIONES Y PROCEDIMIENTOS
  43. void CrearBlocDeNotas(){
  44. char nomBloc[30];
  45.  
  46. printf("Asigna un titulo a tu nueva tarea: ");
  47. scanf("%[^\n]",&nomBloc);
  48. fopen(nomBloc,"w+");
  49. printf("Tarea Creada con Exito!");
  50. printf("Regresando al menu principal de Easy Take List...");
  51. sleep(3);
  52. }
  53. void BuscarBlocDeNotasL(){
  54. FILE * arch;
  55.  
  56. char nomBloc[30];
  57. char cadena[100];
  58. printf("Nombre de la tarea: ");
  59. scanf("%[^\n]",&nomBloc);
  60. arch = fopen(nomBloc,"r");
  61. if(arch == NULL){printf("Error de Lectura, Verifica el nombre de la tarea y vuelve a intentarlo\n");sleep(3);}
  62. else{
  63. printf("Lextura Exitosa!\n");
  64. printf("------------->Easy Take List<-------------\n");
  65. while(feof(arch)==0){
  66. fgets(cadena,100,arch);
  67. printf("%s",cadena);
  68. }
  69. fclose(arch);
  70. printf("----------------------------------------------------");
  71. sleep(10);
  72. }
  73. }
  74.  
  75. void AbrirBlocDeNotasE(){
  76. FILE * arch;
  77.  
  78. char nomBloc[30];
  79. char cadena[100];
  80.  
  81. printf("Nombre de la tarea: ");
  82. scanf("%[^\n]",&nomBloc);
  83. arch = fopen(nomBloc,"a");
  84. fflush(stdin);
  85. if(arch == NULL){printf("Error de Lectura, Verifica el nombre de la tarea y vuelve a intentarlo\n");sleep(3);}
  86. else{
  87. printf("Lectura exitosa\n");
  88. while(strcmp(cadena,"FIN")!=0){
  89. printf("Ingresa los detalles de la tarea: ");
  90. scanf("%[^\n]",&cadena);
  91. if(strcmp(cadena,"FIN")!=0){
  92. fputs(cadena,arch);
  93. fputs("\n",arch);
  94. setbuf(stdin,NULL);
  95.  
  96. }
  97. }
  98. fclose(arch);
  99. }
  100.  
  101. }

MOD: El código debe ir entre ambas etiquetas de Código GeSHi


« Última modificación: 15 Diciembre 2020, 07:28 am por K-YreX » En línea

Xlajenafroxdro

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Necesito ayuda para poner una fecha limite o fecha final a mi programa para mi bloc de notas
« Respuesta #1 en: 15 Diciembre 2020, 06:45 am »

Estoy igual ojala alguien ayude


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Necesito ayuda para poner una fecha limite o fecha final a mi programa para mi bloc de notas
« Respuesta #2 en: 15 Diciembre 2020, 08:15 am »

Tienes que concretar un poco más en lo que necesitas. No se sabe dónde o para qué tienes que agregar una fecha límite.

Aparte te eso, algunas recomendaciones:
  • No utilizar variables globales (opc). No la necesitas para nada fuera del main() y aunque así fuese, para eso existen los parámetros en las funciones: para pasar las variables entre ellas.
  • Utilizar constantes para dar un nombre a los valores que hay sueltos por el programa. Por ejemplo:
Código
  1. #define SIZE_NOMBRE 30
  2. #define SIZE_CADENA 100
  3. #define SLEEP_TIME 3
  4. //...
Y así puedes cambiar los valores en un único sitio (al principio del programa) y que se modifique en todos los sitios donde se usa.

  • Poner hasta 2 instrucciones en una línea se puede llegar a dar de paso si es algo muy sistemático y sencillo de ver. Mezclar 3 o más instrucciones dificulta bastante su lectura (línea 61).
  • Utilizas muchas funciones diferentes para lo mismo. Para leer cadenas de texto (char[]) utiliza siempre fgets() ya sea desde un fichero o desde la entrada estándar. Lo único que tienes que cambiar es el último argumento con el nombre del fichero o con stdin para referirte a la entrada estándar.
Código
  1. char nombreBloc[SIZE_NOMBRE];
  2. printf("Introduce el nombre del bloc: ");
  3. fgets(nombreBloc, SIZE_NOMBRE, stdin);
Si utilizas scanf(), tal y como haces, el programa fallará si introduces un número de caracteres mayor a la longitud máxima permitida. Con fgets() evitas esta situación.

  • Relacionado con lo anterior, fflush(stdin) no es una forma correcta de usar la función fflush(). Esta fue diseñada para limpiar el buffer de salida (stdout), no el de entrada (stdin). Su comportamiento no está definido. Una forma de limpiar el buffer es utilizar getchar() que coge un caracter del buffer.
Seguido al ejemplo anterior de fgets(), si justo después incluyes estas líneas conseguirás, por una parte eliminar el salto de línea final de la cadena y por otra dejar el buffer limpio.
Código
  1. fgets(nombreBloc, SIZE_NOMBRE, stdin);
  2. if(nombreBloc[strlen(nombreBloc) - 1] == '\n') nombreBloc[strlen(nombreBloc) - 1] = '\0'; // si el salto de linea esta al final, lo sustituyes por el fin de cadena y ya sabes que no queda nada en el buffer
  3. else while(getchar() != '\n'); // si queda algo en el buffer (el salto de linea o caracteres que no cabian), entonces lo limpias
Igual que con la lectura de cadenas, no sigues un patrón claro de limpieza. A veces llamas a fflush(), otras veces no... Y luego está la función setbuf() que no sé si sabes exactamente lo que hace ya que es la primera vez que la veo en unos cuantos años.

  • feof() no debe utilizarse como condición de parada en la lectura de ficheros. Utiliza directamente el valor que devuelve fgets().
Código
  1. while(fgets(cadena, SIZE_CADENA, fichero))
  2.  printf("%s", cadena);

  • Por otro lado, en las dos últimas funciones compruebas si el fichero se ha abierto correctamente pero en la primera no. Qué pasa si no se puede crear el fichero?
  • Y en la última función, en vez de hacer la comprobación con un while() (que en la primera iteración no tienes nada en <cadena>), utiliza un do-while() que primero ejecuta el interior y después hace la comprobación.
Código
  1. // Esto puede ir como constante global o dentro de la propia funcion
  2. const char CADENA_FIN[] = "FIN";
  3.  
  4. char cadena[SIZE_CADENA];
  5. int continuar;
  6. do {
  7.  printf("Introduce una cadena: ");
  8.  fgets(cadena, SIZE_CADENA, stdin);
  9.  // Como he dicho antes, eliminas el salto de linea y limpias el buffer
  10.  if(cadena[strlen(cadena) - 1] == '\n') cadena[strlen(cadena) - 1] = '\0';
  11.  else while(getchar() != '\n');
  12.  // Ahora comparas la cadena
  13.  continuar = (strcmp(cadena, CADENA_FIN)); // Guardara 0 (que equivale a false) si son iguales y 1 o -1 (que equivale a true por ser distinto de 0) en otro caso. Asi no haces la comparacion 2 veces
  14.  if(continuar){
  15.    // No veo ninguna ventaja de usar fputs() en vez de fprintf()
  16.    fprintf(fichero, "%s\n", cadena);
  17.  }
  18. } while(continuar);

Dicho todo esto, espero que apliques los consejos aunque lo hagas a tu manera. Y especifica con más detalle el problema que tienes para poder ayudarte.

PD: Permíteme hacer esta mención:
Estoy igual ojala alguien ayude
Fíjate en la diferencia. Alex1209 ha abierto un tema con un poco de formalidad y siguiendo las normas y ha tenido más ayuda ya que si hubiese abierto x temas con títulos para nada descriptivos, sin aportar nada y solo pidiendo que le hagan la tarea. Y no ha tenido que pedir que sean serios... :silbar: :silbar:
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines