Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: facusg10 en 27 Agosto 2018, 02:15 am



Título: AYUDA con ficheros lenguaje c
Publicado por: facusg10 en 27 Agosto 2018, 02:15 am
Hola quisiera saber como hacer para que en la modificación del segundo fichero no se me repita la ultima palabra.
Acá les dejo el código. (primero antes de correr el programa hay que crear un archivo llamado Texto.txt y poner un par de palabras ). El archivo modificado se guarda en la misma carpeta donde esta el código.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <conio.h>
  5.  
  6. void archivar (char texto[20]);
  7. void limpiar (void);
  8.  
  9. int main()
  10. {
  11. FILE * archivo;
  12. char palabra[20];
  13. char modifica[20];
  14. char texto[20];
  15.  
  16. limpiar();
  17. printf("Ingrese la palabra que va a cambiar en el fichero 'Texto': ");
  18. fflush(stdin);
  19. gets(palabra);
  20. printf("¿Por que palabra la va a cambiar?:  ");
  21. fflush(stdin);
  22. gets(modifica);
  23.  
  24. archivo = fopen("Texto.txt", "r+");
  25.  
  26. if (archivo == NULL){
  27.  
  28. printf("\nNO SE ENCONTRO EL ARCHIVO Texto.txt.\n\n");
  29. }
  30. else{
  31.  
  32. while (feof(archivo) == 0)
  33. {
  34. fscanf(archivo, "%s" ,&texto);
  35. if(strcmp(texto,palabra)==0)  
  36. {
  37. strcpy(texto,modifica);
  38. }
  39. archivar(texto);
  40. }
  41. fclose (archivo);
  42. }
  43. getch();
  44. }
  45.  
  46. void archivar (char texto[20])
  47. {
  48.  
  49. FILE * archivo1;
  50. archivo1 = fopen("Modificado.txt", "a");
  51. fputs(texto, archivo1);
  52. fprintf(archivo1," ");
  53. fclose(archivo1);
  54. }
  55. void limpiar (void)
  56. {
  57. FILE * archivo1;
  58. archivo1 = fopen("Modificado.txt", "w+");
  59. fclose(archivo1);
  60. }


Mod: Obligatorio el uso de etiquetas GeSHi para códigos.


Título: Re: AYUDA con ficheros lenguaje c
Publicado por: MAFUS en 27 Agosto 2018, 12:24 pm
Fíjate en el while. Por otra parte hay modificaciones menores para evitar buffer overflow.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void archivar(char *texto);
  5. void limpiar(void);
  6.  
  7. int main() {
  8.    FILE *archivo;
  9.    char palabra[20];
  10.    char modifica[20];
  11.    char texto[20];
  12.  
  13.    limpiar();
  14.    printf("Ingrese la palabra que va a cambiar en el fichero 'Texto': ");
  15.    scanf("%19s", palabra);
  16.    while(getchar()!='\n');
  17.    printf("¿Por que palabra la va a cambiar?: ");
  18.    scanf("%19s", modifica);
  19.    while(getchar()!='\n');
  20.  
  21.    archivo = fopen("Texto.txt", "r+");
  22.  
  23.    if(!archivo) {
  24.        printf("\nNO SE ENCONTRO EL ARCHIVO Texto.txt.\n\n");
  25.    }
  26.    else {
  27.        fscanf(archivo, "%19s", texto);
  28.        while(!feof(archivo)) {
  29.            if(strcmp(texto, palabra)==0) {
  30.                strcpy(texto, modifica);
  31.            }
  32.            archivar(texto);
  33.            fscanf(archivo, "%19s", texto);
  34.        }
  35.        fclose(archivo);
  36.    }
  37.    printf("Pulse INTRO para salir...");
  38.    getchar();
  39. }
  40.  
  41. void archivar(char *texto) {
  42.    FILE *archivo;
  43.    archivo = fopen("Modificado.txt", "a");
  44.    fprintf(archivo, "%s ", texto);
  45.    fclose(archivo);
  46. }
  47.  
  48. void limpiar(void) {
  49.    FILE *archivo;
  50.    archivo = fopen("Modificado.txt", "w+");
  51.    fclose(archivo);
  52. }


Título: Re: AYUDA con ficheros lenguaje c
Publicado por: facusg10 en 27 Agosto 2018, 16:56 pm
Muchas gracias me salvaste. Ahora voy a tratar de solucionar lo del buffer overflow


Título: Re: AYUDA con ficheros lenguaje c
Publicado por: MAFUS en 27 Agosto 2018, 17:11 pm
Ya viene en el código. Pero falta controlar el error del archivo no abierto en las funciones auxiliares.