Eso es por si llegas al final del archivo después de una lectura y no sigas con el bucle sin nada que computar.
Sólo te da un resultado porqué tienes el fprintf que te muestra los resultados fuera del bucle principal, con lo que solo leerá una vez un formato correcto. ¿Que hacer?
1. Antes de entrar en el bucle principal haz una lectura con fgets.
2. Cambia todo el formato de bucle do - while por
3. Antes de terminar el bucle inserta dentro el fprintf para visualizar los datos correctos.
4. Justo antes de terminar el bucle y después del fprintf del punto #3 vuelve a realizar una lectura con fscanf.
Los cambios:
lectores=fopen("lectores.txt","w");
return 0;
}
else{
fgets (linea, sizeof(linea), lectores);
while(!feof(lectores)) {
correcto = 1;
// Si el último carácter leído no es un '\n', es que el usuario ha
// tecleado una línea demasiado larga => entrada no correcta
// Si la entrada no es correcta, avisamos al usuario
if (!correcto)
fprintf (stdout, "\nLinea mal formada en el fichero (lectores.txt).\n");
else {
// Si lo es Mostramos los datos extraídos
fprintf(stdout,"\nEl numero es: %d. Y el nombre es: %s\n\n", numero, nombre);
fflush(stdout);
}
fgets (linea, sizeof(linea), lectores);
}
}
return 0;