Gracias Sam! No sé muy bien si era eso o no por que lo solucioné ayer y recién acabo de mirarlo, pero puede ser. Cambié eso entre otras cosas.
Respecto a lo de depuración... ¿No te resulta muy tedioso tener que poner printf's? Yo es que estoy acostumbrado a seguir las variables con un depurador, con el Visual C++, y ahora que me he unido a linux me encuentro desamparado jajaja
Por cierto, pongo el programa arreglado por si alguno tiene curiosidad:
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
main()
{
FILE *pf;
struct ficha{
int clave;
char nombre[50];
float nota;};
int i=0, j=0, n=0;
char c;
struct ficha registro; /*Crea una estructura del tipo ficha llamada registro*/
if ((pf
= fopen("registro.txt", "a+")) == NULL
) {puts("Error al abrir el fichero");} /*Abre el fichero <<registro.txt>>, donde grabaremos los datos*/
puts("¿Que desea hacer?"); /*******************************AÑADIR DATOS*******************************/
if(c == 'A')
{
puts("Cuantos registros quieres introducir?: "); /*Pide tantos registros como se quieran introducir*/
for(j=0; j<n; j++){ /*El bucle pide una tanda de datos, los guarda en registro (struct ficha) y los graba en el fichero*/
puts("Introduzca los datos del alumno"); scanf("%d", ®istro.
clave);
scanf("%f", ®istro.
nota);
if(fwrite(®istro
, sizeof(registro
), 1, pf
) != 1) perror("escribiendo el fichero"); /*Graba los datos en el fichero*/
}
/*******************************LEER DATOS*******************************/
if(c == 'L'){
fseek(pf
, i
*sizeof(registro
), 0); /*Desplaza el puntero de L/E al inicio del fichero*/ fread(®istro
, sizeof(registro
), 1, pf
); /*Concepto de "lectura adelantada". Guarda la primera estructura en registro (struct ficha)*/
while(!feof(pf
)){ /*Hasta que no llegue a la marca de fin de fichero no cesa el bucle*/ i++;
printf("\nNOMBRE: %s, CLAVE: %d, NOTA: %0.2f \n", registro.
nombre, registro.
clave, registro.
nota); /*Imprime por pantalla los datos de registro*/ fseek(pf
, i
*sizeof(registro
), 0); /*Avanza el cursor L/E a la siguiente estructura*/ fread(®istro
, sizeof(registro
), 1, pf
); /*Lee dichos datos y, sobrescribiendo, los guarda en registro*/ }
return 0;
}