[ Foro de C ]

solución ejercicio 2 de la pag. 92

14-Dec-2009 19:41
mario moreno
6 Respuestas

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


15-Dec-2009 02:15
Nacho Cabanes (+83)

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();


16-Dec-2009 16:37
mario moreno

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();
               }
                   }

               }


25-Dec-2009 13:12
Nacho Cabanes (+83)

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 !!!)


29-Dec-2009 17:41
mario moreno

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));


30-Dec-2009 01:09
Nacho Cabanes (+83)

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));


31-Dec-2009 16:47
mario moreno

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.)