Explico, lo que tengo es una estructura que consta de 6 campos del que se compondrá el registro que voy a usar. Lo que necesito es crear un archivo que va a ser secuencial con registro de largo variable, Para ello, estoy tratando de hacer un programa para que se llenen 5 de los 6 campos anteriormente mencionados, y uno de ellos lo voy a llenar después mediante otro procedimiento.
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stAntecedente {
char rut_alumno[10];
int id_documento;
char sentencia[30];
int id_delito;
char fecha[12];
char rut_polichile[12];
};
void InsertarAntecedente(struct stAntecedente *regi)
{
int i;
char num[6];
regi
= (struct stAntecedente
*)malloc (sizeof(struct stAntecedente
));
regi
->id_documento
= atoi(num
);
fgets(regi
->rut_alumno
, 30, stdin
); for(i
= strlen(regi
->rut_alumno
)-1; i
&& regi
->rut_alumno
[i
] < ' '; i
--) regi->rut_alumno[i] = 0;
printf("Código del delito cometido: "); regi
->id_delito
= atoi(num
);
printf("Fecha en que se cometió el delito: "); fgets(regi
->fecha
, 30, stdin
); for(i
= strlen(regi
->fecha
)-1; i
&& regi
->fecha
[i
] < ' '; i
--) regi->fecha[i] = 0;
printf("RUT del funcionario a cargo: "); fgets(regi
->rut_polichile
, 30, stdin
); for(i
= strlen(regi
->rut_polichile
)-1; i
&& regi
->rut_polichile
[i
] < ' '; i
--) regi->rut_polichile[i] = 0;
//Este opción introduce una sentencia, pero para este programa no se usa
/*printf("Sentencia: ");
fgets(regi->sentencia, 30, stdin);
for(i = strlen(regi->sentencia)-1; i && regi->sentencia[i] < ' '; i--)
regi->sentencia[i] = 0; */
}
int main()
{
struct stAntecedente regi;
FILE *filea;
filea
= fopen("antecedentes.dat", "r+b"); if(!filea)
filea
= fopen("antecedentes.dat", "w+b");
InsertarAntecedente(®i);
fseek(filea
, 0, SEEK_END
); fwrite(®i
, sizeof(struct stAntecedente
), 1, filea
);
}
A pesar de que hice reserva de memoria sobre la estructura con la que voy a trabajar, no me resulta la inserción del registro, cosa que ustedes pueden ver con este otro programa que muestra la lista de registros almacenados en ese archivo.
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stAntecedente {
char rut_alumno[10];
int id_documento;
char sentencia[30];
int id_delito;
char fecha[12];
char rut_polichile[12];
};
void MostrarAntecedente (struct stAntecedente *regi)
{
printf("%2d %-11s %-11s %8d %-13s %-14s\n", regi
->id_documento
, regi
->rut_polichile
, regi
->fecha
, regi
->id_delito
, regi
->rut_alumno
, regi
->sentencia
); }
int main()
{
/* Mostrar la lista total de antecedentes */
struct stAntecedente regi;
FILE *filea;
filea
= fopen("antecedentes.dat", "r+b"); if(!filea)
filea
= fopen("antecedentes.dat", "w+b"); printf("----------------------------------------------------------------\n"); printf("ID Rut.PCH Fecha Delito Rut. Alumno Sentencia\n"); printf("----------------------------------------------------------------\n"); while (fread(®i
, sizeof(struct stAntecedente
), 1, filea
)) MostrarAntecedente(®i);
}
No he trabajado antes con largo variable, sino solamente con largo fijo. No sé que más puedo corregir.
De antemano se agradece la ayuda.
Saludos.