Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DickGumshoe en 4 Febrero 2012, 21:33 pm



Título: Problema en ejercicio de ficheros
Publicado por: DickGumshoe en 4 Febrero 2012, 21:33 pm
Hola.

Estoy empezando con el tema de ficheros.

Tengo este ejercicio:

Código
  1. /*Un programa que pregunte un nombre de fichero y muestre en pantalla el contenido de
  2. ese fichero, haciendo una pausa después de cada 25 líneas, para que dé tiempo a
  3. leerlo. Cuando el usuario pulse intro, se mostrarán las siguientes 25 líneas, y así hasta
  4. que termine el fichero.*/
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9.  
  10.  
  11. int main()
  12. {
  13.    FILE* fichero;
  14.    char nombre[50];
  15.    char linea[81];
  16.    char pausar[2];
  17.    int i;
  18.  
  19.    printf("Introduce un nombre");
  20.    fgets(nombre,49,stdin);
  21.    i=0;
  22. fichero = fopen(nombre, "rt");
  23. if (fichero == NULL)
  24. {
  25. printf("No existe el fichero!\n");
  26. exit(1);
  27. }
  28. while (! feof(fichero)) {
  29.                i=i+25;
  30. fgets(linea, i, fichero);
  31. puts(linea);
  32. do{
  33. gets(pausar);
  34. }
  35. while(strcmp(pausar,"")!=0);            
  36.  
  37. }
  38.  
  39. fclose(fichero);
  40.  
  41.    system("pause");
  42.    return 0;
  43. }
  44.  

Pero tengo varias cosas mal:

- Siempre me dice que el fichero no existe.
- No consigo que pare cada 25 líneas hasta que presione intro sin escribir nada (lo que he conseguido ha sido cada X letras...).

Muchas gracias.

Saludos.


Título: Re: Problema en ejercicio de ficheros
Publicado por: DickGumshoe en 4 Febrero 2012, 22:49 pm
Vale, he solucionado uno de los problemas. Ya me reconoce cuándo existe y cuándo no un archivo. Lo que he hecho ha sido sustituir fgets por gets.

Pero todavía me queda la otra parte del problema.

Gracias.

Saludos.


Título: Re: Problema en ejercicio de ficheros
Publicado por: eleon en 5 Febrero 2012, 00:18 am
Para pausar hasta que le de a intro te basta con poner un "scanf()" al final del bucle.

Saludos.


Título: Re: Problema en ejercicio de ficheros
Publicado por: DickGumshoe en 5 Febrero 2012, 15:17 pm
Gracias por contestar.

Eso lo tengo, aunque de otra forma (comparando "pausar" con "").

Lo que me falta es que cada 25 líneas pare, que no sé cómo podría hacerlo...


Título: Re: Problema en ejercicio de ficheros
Publicado por: eleon en 5 Febrero 2012, 15:27 pm
Con un contador. Si cada vez que se ejecuta el bucle se imprime una línea, debes llevar un contador que calcule el número de lineas impresas y al llegar a 25 con un condicional te pida presionar {ENTER}. Ejemplo:

Código
  1. short unsigned int contador = 0;
  2. while (condicion)
  3. {
  4. //Instrucciones para imprimir la línea
  5. contador += 1;
  6.  
  7. if (contador == 25)
  8. {
  9. scanf ("");
  10. contador = 0; //Lo reiniciamos para que vuelva a contar 25 líneas
  11. }

Y en esta parte:

Código
  1. do{
  2. gets(pausar);
  3. }
  4. while(strcmp(pausar,"")!=0);

No es correcto el uso de gets, es aconsejable cambiarlo por scanf. Si has declarado la cadena "pausar" con 2 elementos, el usuario puede perfectamente introducir "sidhashi {ENTER}" y gets lo recoge todo almacenándolo en zonas de memoria consecutivas y arriesgándote a que sobreescriba sobre otros datos en uso.

Saludos.


Título: Re: Problema en ejercicio de ficheros
Publicado por: DickGumshoe en 5 Febrero 2012, 15:50 pm
Muchísimas gracias.

Ya he entendido cómo se hace.

Saludos.