
¿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


0