[ Foro de C ]
Alguien puede poner la solución del segundo ejercicio propuesto de la pag. 92?. Ese que comienza diciendo "Un programa que pregunte un nombre de fichero...". Gracias
Supongo que el problema lo tendrás para interrumpir cada 25 líneas.
El truco es llevar un contador de líneas, y usar la operación "resto de la división" para comprobar si ya llevas 25, con algo como:
if (contador % 25 == 24) getchar();
Yo había hecho algo como esto. Pero claro, creo que no son 25 líneas exactamente, por eso quería comparar el código para ver dónde estaba el error. Pero si se da por válido mi código pues simplemente seguiré avanzando en el curso.
cont = 0;
while (! feof(fichero)){
for (cont = 0; cont < 25; cont++){
fgets(datos, 80,fichero);
puts(datos);
cont++;
if (cont == 25){
printf("\nPresiones una tecla para continuar...");
getchar();
}
}
}
Tu solución tiene un par de problemas:
No debería haber un "for" dentro del "while", porque si no has llegado al final del fichero, e intentas leer 25 líneas a la vez, generalmente no se comportará correctamente, salvo que dé la casualidad de la cantidad de líneas del fichero sea exactamente un múltiplo de 25.
Además, tienes dos líneas "cont++": una en el "for" y otra después del "puts", de modo el contador aumenta de 2 en 2, de modo que sólo mostraras la mitad de líneas, y con el riesgo de que nunca valga 25, si el contador sigue la secuencia 0,2,4,6,8...
(¡¡¡ Felices fiestas !!!)
Esto estaría mejor?
do{
for (cont = 0; cont < 25; cont++){
fgets(datos, 80,fichero);
puts(datos);
}
if (cont == 25){
printf("\nPresiona ENTER para continuar...");
getchar();
}
}while (! feof(fichero));
Sigue sobrando el "for", porque intentas leer 25 líneas, sin comprobar errores hasta que terminas de leer las 25.
Sería mejor algo como:
contador = 0;
do
{
contador ++;
fgets(datos, 80,fichero);
puts(datos);
if (cont == 25)
{
printf("\nPresiona ENTER para continuar...");
getchar();
contador = 0;
}
}
while (! feof(fichero));
Gracias por la aclaración. :)
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)