UTNianos

Versión completa: Duda Algoritmos
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
hola a todos, hace mucho que curse algorimos y la estoy por dar ahora, y hay algo que no me esta cerrando.

Cuando se esta leyendo un archivo, lo que dice el apunte oficial es.



C
main()
{
FILE *f1, f2;
int c;
f1 = fopen(“entrada”, “r”);
f2 = fopen(“salida”,”w”);
c = fgetc(f1);
while (!feof(f1)) {
fputc(c, f2);
c = fgetc(f1);
}
fclose(f1);
fclose(f2);
return 0;
}



Solución algorítmica
AbrirArchTextoLectura(f1, “entrada”)
AbrirArchTextoEscritura(f2,”salida”)
LeerCaracter(f1,c)
Mientras(!feof(f1))
GrabarCaracter(f2,c)
LeerCaracter(f1,c)
FinMientras
Cerrar(f1)
Cerrar(f2)



Mi pregunta es que, al leer el caracter previo al while, si el archivo solo tiene 1 caracter, al leerlo el puntero no se posiciona en el eof y por ende no entra a la repetitiva ?


Gracias!
Hola.
Si tiene un caracter, yo creo que sí. Deberías probarla, si no anda, podrias reemplezar el while por un do-while

do {
c = fgetc(f1);
fputc(c, f2);
}while (!feof(f1))



Saludos
Pero para N caracteres, va a poder leer n-1, pq el ultimo no lo va a tomar por estar en EOF, es asi? me parece raro pq esta en el pdf de la materia..
EOF es un caracter en sí mismo*, por lo tanto hay que leerlo. Así que lee el primero, feof es falso, ejecuta fputc y vuelve a leer. Ese caracter que lee es el EOF y ahí sale del while.

*Por decirlo de algún modo. No es EXACTAMENTE un caracter, pero internamente igual hay que hacer una lectura para que se alcance esa marca.
URLs de referencia