Gracias a los que respondieron, anotare sus nombres por alli para agredecerles cuando pueda, he resuelto el problema utilizando este codigo, sin embargo sus respuestas (AlbertoBSD, class_OpenGL, MAFUS), son muy utiles, ya que tambien resuelven el problema mediante codigos similares
Este es el que he usado, sustituyendo el while por este:
Excelente respuesta mi amigo!
Tu respuesta es muy util
Teneis toda la razon, tu respuesta es muy buena, y explica claramente como resolver el problema.
Os aprecio a todos por la ayuda que me han dado
Este es el que he usado, sustituyendo el while por este:
Código (c) [Seleccionar]
while(1)
{
n++;
for(x=0;x<=19;x++)
{
fscanf(fPtr,"%c",&XRecord.Charac[x]);
}
if(feof(fPtr))
{
break;
}
printf("Record Number:%d\n",n);
for(i=0;i<=19;i++)
{
printf("%c",XRecord.Charac[i]);
}
printf("\n");
}
Cita de: class_OpenGL en 23 Junio 2016, 03:40 AM
He compilado el código y me ha dado unas cuantas advertencias. Deberías vigilarlas. Yo no voy a mostrar las advertencias pues lo puedes mirar tu mismo, pero aun así es preferible que un programa no las tenga, pues son potenciales errores que después cuesta solucionar (lo digo por experiencia).
Respecto al error, es bastante fastidiante (me ha pasado hace poco xD). Lo que pasa es que el indicador de feof se activa solo cuando se intenta leer un carácter pero ya no quedan más. Entonces, cuando terminas de leer el último registro, no llegas a activar el feof y por lo tanto el while se ejecuta una vez más.
Para solucionarlo, puedes comprobar que no has llegado al final del archivo antes de mostrar el supuesto registro:Código (c) [Seleccionar]while(!feof(fPtr)) {
n++;
for(x = 0; x <= 19; x++)
fscanf(fPtr, "%c", &XRecord.Charac[x]);
if(!feof(fPtr)) { // Compruébalo aquí
printf("Record Number:%d\n",n);
for(i=0;i<=19;i++)
printf("%c", XRecord.Charac[i]);
printf("\n");
}
}
Excelente respuesta mi amigo!
Cita de: AlbertoBSD en 23 Junio 2016, 06:58 AM
Si es cierto!!!!
Una solucion alterna a este problema es determinar la longitud del archivo y dividirlo entre el tamaño la estructura y asi solo leer el numero exacto de datos.
Posiblemente te pasaba lo mismo con el fread.
Saludos
Tu respuesta es muy util
Cita de: MAFUS en 23 Junio 2016, 16:12 PM
Eso es porqué al leer el tercer registro todavía no has llegado al final del archivo por eso el bucle itera una última vez.
Crea una variable tipo char (yo la llamo c) y cambia las líneas 132 y 133 por las siguientes:Código [Seleccionar]while((c = fgetc(fPtr)) != EOF) {
ungetc(c, fPtr);
Teneis toda la razon, tu respuesta es muy buena, y explica claramente como resolver el problema.
Os aprecio a todos por la ayuda que me han dado