AYUDA con ficheros lenguaje c

Iniciado por facusg10, 27 Agosto 2018, 02:15 AM

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

facusg10

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 (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

void archivar (char texto[20]);
void limpiar (void);

int main()
{
FILE * archivo;
char palabra[20];
char modifica[20];
char texto[20];

limpiar();
printf("Ingrese la palabra que va a cambiar en el fichero 'Texto': ");
fflush(stdin);
gets(palabra);
printf("¿Por que palabra la va a cambiar?:  ");
fflush(stdin);
gets(modifica);

archivo = fopen("Texto.txt", "r+");

if (archivo == NULL){

printf("\nNO SE ENCONTRO EL ARCHIVO Texto.txt.\n\n");
}
else{

while (feof(archivo) == 0)
{
fscanf(archivo, "%s" ,&texto);
if(strcmp(texto,palabra)==0)  
{
strcpy(texto,modifica);
}
archivar(texto);
}
fclose (archivo);
}
getch();
}

void archivar (char texto[20])
{

FILE * archivo1;
archivo1 = fopen("Modificado.txt", "a");
fputs(texto, archivo1);
fprintf(archivo1," ");
fclose(archivo1);
}
void limpiar (void)
{
FILE * archivo1;
archivo1 = fopen("Modificado.txt", "w+");
fclose(archivo1);
}




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

MAFUS

Fíjate en el while. Por otra parte hay modificaciones menores para evitar buffer overflow.

#include <stdio.h>
#include <string.h>

void archivar(char *texto);
void limpiar(void);

int main() {
    FILE *archivo;
    char palabra[20];
    char modifica[20];
    char texto[20];

    limpiar();
    printf("Ingrese la palabra que va a cambiar en el fichero 'Texto': ");
    scanf("%19s", palabra);
    while(getchar()!='\n');
    printf("¿Por que palabra la va a cambiar?: ");
    scanf("%19s", modifica);
    while(getchar()!='\n');

    archivo = fopen("Texto.txt", "r+");

    if(!archivo) {
        printf("\nNO SE ENCONTRO EL ARCHIVO Texto.txt.\n\n");
    }
    else {
        fscanf(archivo, "%19s", texto);
        while(!feof(archivo)) {
            if(strcmp(texto, palabra)==0) {
                strcpy(texto, modifica);
            }
            archivar(texto);
            fscanf(archivo, "%19s", texto);
        }
        fclose(archivo);
    }
    printf("Pulse INTRO para salir...");
    getchar();
}

void archivar(char *texto) {
    FILE *archivo;
    archivo = fopen("Modificado.txt", "a");
    fprintf(archivo, "%s ", texto);
    fclose(archivo);
}

void limpiar(void) {
    FILE *archivo;
    archivo = fopen("Modificado.txt", "w+");
    fclose(archivo);
}

facusg10

Muchas gracias me salvaste. Ahora voy a tratar de solucionar lo del buffer overflow

MAFUS

Ya viene en el código. Pero falta controlar el error del archivo no abierto en las funciones auxiliares.