muchas gracias
eferion por tu respuesta, el programa lo que hace es que me pide que le ingrese 10 registros que contengan(nombre,edad y ciudad residencia) y despues me pide un numero del 1 al 10 y me tiene que imprimir ese registro, el problema es que si le pido por ejemplo el registro numero 2 y este registro es:
marco22guadalajara, (nombre,edad, ciudad) el programa me imprime marco22guadalajar, o sea que se come la ultima letra y ya lo revise pero no entiendo por que hace esto
El programa basicamente me hace un arreglo del tamanio de cada registro para ver donde esta cada uno
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 35
#define TAM 10
/*
Ampliar el programa anterior para que use un “array de structs”, de forma que se puedan tener datos de 10 personas.
Se deberán pedir los datos de las 10 personas y guardarlos en el fichero, Después se pedirá un número del 1 al 10
y se mostrarán los datos de la persona indicada por ese número,que se deberán leer de fichero
(1 será la primera ficha, y 10 será la última). Por ejemplo,
si el usuario indica que quiere ver los datos de la persona 3 (tercera), se deberá leer las dos primeras,
ignorando su contenido, y después leer la tercera, que sí se deberá mostrar.
*/
typedef struct datos
{
char nombre[MAX];
int edad;
int tamanio;
char ciudad_residencia[MAX];
}Persona;
void agregarRegistro(Persona p[],int i);
void buscarRegistro(FILE *ap,int numeroRegistro,int arregloTam[]);
int main()
{
Persona p[TAM];
int i,numeroRegistro,tamanioRegistro,suma = 0,arregloTam[TAM];
FILE *fd,*ap;
if((fd
= fopen("F:\\gente.txt","w+"))!= NULL
) {
for(i = 0;i < TAM;i++)
{
agregarRegistro(p,i);
fprintf(fd
,"%s%d%s",p
[i
].
nombre,p
[i
].
edad,p
[i
].
ciudad_residencia); tamanioRegistro
= (ftell(fd
) - suma
); arregloTam[i] = tamanioRegistro;
suma+=tamanioRegistro;
}
if((ap
= fopen("F:\\gente.txt","r"))!= NULL
) {
printf("Dame un numero(del 1 al 10): "); scanf("%d",&numeroRegistro
); buscarRegistro(ap,numeroRegistro,arregloTam);
}
else
printf("No se pudo abrir archivo"); }
else
printf("No se pudo crear archivo"); return 0;
}
void agregarRegistro(Persona p[],int i)
{
char cad[10],*ptr;
fgets(p
[i
].
nombre,MAX
,stdin
); if((ptr
= strchr(p
[i
].
nombre,'\n'))!= NULL
) *ptr = '\0';
fgets(cad
,sizeof(cad
),stdin
); printf("Dame ciudad de residencia:\n"); fgets(p
[i
].
ciudad_residencia,MAX
,stdin
); if((ptr
= strchr(p
[i
].
ciudad_residencia,'\n'))!= NULL
) *ptr = '\0';
}
void buscarRegistro(FILE *ap,int numeroRegistro,int arregloTam[])
{
int i = 0,posicion,tam;
char Registro[100];
while(i < numeroRegistro-1)
{
posicion = arregloTam[i];
fseek(ap
,posicion
,SEEK_CUR
); i++;
}
tam = arregloTam[i];
}