Dev - C++ - ¿Cómo modificar un registro de un archivo?

 
Vista:
sin imagen de perfil

¿Cómo modificar un registro de un archivo?

Publicado por Agus (2 intervenciones) el 15/06/2017 22:52:22

Esta función lo que hace es modificar los datos de un usuario, funciona pero el problema es que al modificar los datos, copia los datos del id que sigue.

Un pequeño ejemplo:


/*
id 1
nombre leo
usuario: soyid1

id 2
nombre raul
usuario: soyid2

pero al modificar el id 1 quedaria algo asi

id 2
nombre pedro
usuario: soyid2

id 2
nombre raul
usuario: soyid2

copia los datos de abajo menos lo que modificas
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
void modificar_datos_usuario ()
{
  int idaux=0;
  int opcion=0;
  char datonuevo [maxchar],resultado;
  FILE* puntero_afile;
  Cliente cl;
  puntero_afile = fopen("datos_usuarios", "r+b");
    printf( "¿Que id estas buscando? " );
    scanf( "%i", &idaux);
    resultado = fseek(puntero_afile,sizeof(cl)*(idaux-1),0);
    fread(&cl, sizeof (cl), 1, puntero_afile);
    if (!resultado)
    {
            printf ("Estos son tus datos: \n");
         printf ("\n ID DE USUARIO :  %i", cl.id);
         printf ("\n NOMBRE :  %s", cl.nombre);
         printf ("\n APELLIDO :  %s", cl.apellido);
         printf ("\n DOMICILIO :  %s", cl.domicilio);
         printf ("\n LOCALIDAD :  %s", cl.localidad);
         fread(&cl, sizeof (cl), 1, puntero_afile);
      do
       {
         system ("COLOR 0F");
         printf ("\n (1) NOMBRE");
         printf ("\n (2)APELLIDO");
         printf ("\n (3)DOMICILIO");
         printf ("\n (4)LOCALIDAD");
         printf( "\n\Introduzca opci%cn : ", 162);
         fflush(stdin);
         scanf( "%d", &opcion );
         switch ( opcion )
         {
            case 1:
                   fseek(puntero_afile,sizeof(cl)*(idaux-1),0);
                   printf("Ingrese su nuevo nombre: ");
                    fflush(stdin);
                    gets (datonuevo);
                    strcpy (cl.nombre, datonuevo);
                   fwrite (&cl, sizeof (cl), 1, puntero_afile);
                   break;
            case 2:
                   printf("Ingrese su nuevo Apellido: ");
                fflush(stdin);
                    gets (datonuevo);
                    strcpy (cl.apellido, datonuevo);
                   fseek(puntero_afile,sizeof(cl)*(idaux-1),0);
                   fwrite (&cl, sizeof (cl), 1, puntero_afile);
                   break;
            case 3:
                   printf("Ingrese su nuevo domicilio: ");
                    fflush(stdin);
                gets (datonuevo);
                    strcpy (cl.domicilio, datonuevo);
                   fseek(puntero_afile,sizeof(cl)*(idaux-1),0);
                   fwrite (&cl, sizeof (cl), 1, puntero_afile);
                   break;
            case 4:
                   printf("Ingrese su nuevo localidad: ");
                    fflush(stdin);
                    gets (datonuevo);
                    strcpy (cl.localidad, datonuevo);
                   fseek(puntero_afile,sizeof(cl)*(idaux-1),0);
                   fwrite (&cl, sizeof (cl), 1, puntero_afile);
                   break;
           default:
                    finalizar_programa();
                    break;
         }
       }while (opcion !=0);
    }
  fclose (puntero_afile);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder