How can I remove a contact from a binary file in c

0

I try to delete a contact but regardless of the line that I indicated to delete only delete the line 0

void  borrarContacto  ()
{
    int l, linea, NUMlineas=0;
    char LINEA[MAX],c, ch;
    FILE *destino, *a;
    printf ("\nTu lista de contactos es la siguiente: \n");
    mostrarContactos();

    printf ("Introduce el numero de contacto que quieres borrar (linea): ");
    scanf ("%d", &l);
    system("PAUSE");
    a=fopen ("E:\datos.dat", "r+");
    destino=fopen ("E:\datos2.dat", "w+");

    /*Leemos todas las lineas del archivo*/
    while (fgets (LINEA, MAX, a)!=NULL)
    {
        if ((ch=getc(a))!= EOF)
            ungetc(ch, a);
        NUMlineas++;
        if (NUMlineas!=linea)
        {
            fputs(LINEA, destino);
        }
    }
    printf ("\nEl contacto ha sido eliminado. Revise su archivo.\n");
    fclose(a);
    fclose(destino);
    remove ("E:\datos.dat");
    rename ("E:\datos2.dat", "E:\datos.dat");

}
    
asked by gioxdsi 10.05.2017 в 06:16
source

1 answer

1

Your problem is that in your if you use a variable other than the one you capture in scanf

 void  borrarContacto  ()
    {
        int l, NUMlineas=0;
        char LINEA[MAX],c, ch;
        FILE *destino, *a;
        printf ("\nTu lista de contactos es la siguiente: \n");
        mostrarContactos();

        printf ("Introduce el numero de contacto que quieres borrar (linea): ");
        scanf ("%d", &l);
         /*!!!!Aqui guardaste el numero de linea en la variable l!!!!*/
        system("PAUSE");
        a=fopen ("E:\datos.dat", "r+");
        destino=fopen ("E:\datos2.dat", "w+");

        /*Leemos todas las lineas del archivo*/
        while (fgets (LINEA, MAX, a)!=NULL)
        {
            if ((ch=getc(a))!= EOF)
                ungetc(ch, a);
            NUMlineas++;

        /*!!!!Aqui debes usar la variable l
              para que esta no sea guardada en el nuevo 
              archivo!!!!*/
            if (NUMlineas!=l)
            {
                /* se guardan en un archivo nuevo menos la linea que se
                quiere borrar*/
                fputs(LINEA, destino);
            }
        }
        printf ("\nEl contacto ha sido eliminado. Revise su archivo.\n");
        fclose(a);
        fclose(destino);

        /*se intercambia el archivo viejo por el nuevo*/
        remove ("E:\datos.dat");
        rename ("E:\datos2.dat", "E:\datos.dat");

    }
    
answered by 12.05.2017 в 22:51