Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: axeelcs en 13 Agosto 2011, 13:58 pm



Título: Consigna con EOF > No se aplicarlo .
Publicado por: axeelcs en 13 Agosto 2011, 13:58 pm
Buenos días, estoy teniendo un problema, porque la profesora nos dió una consigna para que usemos la instrucción EOF, pero no enseño como usarla, y en internet lo único que encuentro es aplicaciones a archivos, por su significado End of File .
La consigna es así:
Citar
Leer un texto carácter por carácter terminando en EOF. Mostrar el texto con solo
la primer y última letra de cada palabra.
Hay más consignas, pero mi problema es que no se como funciona el EOF, y solo podemos usar : getchar y putchar, declarando como int a las variables.
Y claro whiles,for lo que queramos,pero solo con get y put .
Desde ya , muchas gracias ! .


Título: Re: Consigna con EOF > No se aplicarlo .
Publicado por: Gallu en 14 Agosto 2011, 00:41 am
No será que lo que quiere es que leas el fichero hasta que encuentres el EOF o final del mismo ?
Por si te sirve
http://c.conclase.net/librerias/?ansimac=EOF (http://c.conclase.net/librerias/?ansimac=EOF)
Saludos


Título: Re: Consigna con EOF > No se aplicarlo .
Publicado por: PiroskY en 14 Agosto 2011, 18:22 pm
Mostrar el texto con solo la primer y última letra de cada palabra.

WTF!


Mira el uso mas común del EOF es algo mas o menos así

while(!eof)
    fread()

obvio que tiene mas usos, pero eso seria lo mas común.


Creo que lo que quiere tu profesora es algo mas o menos así:

Código
  1. cout << texto[0];
  2.  
  3. for(int x=1 ; texto[x] ; x++)
  4.    if(texto[x] == ' ')
  5.        cout << texto[x-1] << " " << texto[x+1];

Este código no funciona muy bien, pero es para darte una idea.

PD: Podrías explicar mejor el problema?


Título: Re: Consigna con EOF > No se aplicarlo .
Publicado por: axeelcs en 14 Agosto 2011, 19:03 pm
Es en c el programa .
Osea el ejemplo sería así:

Citar
Ejemplo:   Hoy hay parcial de estructuras
                          Hy hy pl de es


Título: Re: Consigna con EOF > No se aplicarlo .
Publicado por: Dark Invader en 14 Agosto 2011, 20:29 pm
¿Has intentado hacer el ejercicio?¿Tienes algun code? :silbar: Intenta hacer algo asi,y si no te sale,te pego el codigo que acabo de hacer,ya que por lo menos lo has intentado...

Un saludo


Título: Re: Consigna con EOF > No se aplicarlo .
Publicado por: Darkgold9 en 14 Agosto 2011, 21:05 pm
Como te dicen por arriba, tu profesora se debe referir a que leas de un archivo (vease un .txt x ejem) un texto, vayas haciendo la operacion que te dice con las palabras que encuentres y veas si se ha terminado el archivo con la funcion EOF.

La idea seria algo como:
        -Abrir el archivo modo lectura.
Código:
FILE *f;
f=fopen(nombrefich,"r");
        -Hacer la funcion que te pide.
        -Comprobar si se ha terminado con EOF:
Código:
while( !feof(f) )
    fread() ó fscanf(...)
     ....
    fclose(f);


     


Título: Re: Consigna con EOF > No se aplicarlo .
Publicado por: axeelcs en 14 Agosto 2011, 22:35 pm
Si, lo hice sin usar el EOF; porque no lo entiendo .
Acá esta el code :
Código:
int c,aux;

    printf("Ingrese frase :");
    c=getchar();
    putchar(c);

    while(c!='.')
    {
        if(c==' ')
        {
            putchar(aux);
            c=getchar();
            putchar(' ');
            putchar(c);
        }

        aux=c;
        c=getchar();

    }

    putchar(aux);


Pasa que no tengo que abrir ningún archivo, es ingresar una frase.


Título: Re: Consigna con EOF > No se aplicarlo .
Publicado por: Dark Invader en 15 Agosto 2011, 00:06 am
Bueno no se si al final es escribir o leer en el archivo  :xD Te he construido un code de unos minutos,funciona bien,pero se puede hacer de otras maneras:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void mostrar(){
  5. FILE *fichero;
  6. char *palabra;
  7. do{
  8. char *p[10];
  9. palabra = (char *) malloc (20 * sizeof(char));
  10. int j;
  11. fichero = fopen("leer.txt","r");
  12. fscanf(fichero,"%s",palabra);
  13. setbuf(stdin,NULL);
  14. j = sizeof(palabra);
  15. p[0] = palabra;
  16. printf ("%c",*p[0]);
  17. p[1] = &palabra[j];
  18. printf("%c",*p[1]);
  19. fseek(fichero,1,SEEK_CUR);
  20. if (feof(fichero)){
  21. break;
  22. }
  23. fscanf(fichero,"%s",palabra);
  24. setbuf(stdin,NULL);
  25. j = sizeof(palabra);
  26. p[2]= palabra;
  27. printf(" ");
  28. printf ("%c",*p[2]);
  29. p[3] = &palabra[j];
  30. printf("%c",*p[3]);
  31. fseek(fichero,1,SEEK_CUR);
  32. if (feof(fichero)){
  33. break;
  34. }
  35. //esa es la idea principal,continua desde aqui
  36. //tambien podrias definir una variable llamada x con un valor 0,hacer un do-while e ir aumentando el numero del punteroasi p[++x]
  37. //pasaria de p[0] a p[1].
  38. }while(1);
  39. fclose(fichero);
  40. }
  41.  
  42. int main(){
  43. mostrar();
  44. return 0;
  45. }
   
el do-while lo he puesto para poder usar la funcion break y salir del bucle,pero con el do-while se puede hacer todo eso,te lo deje en los comentarios del programa.

fichero leer.txt --> vamos todos
resultado en la consola: vs ts

otro ejemplo,aunque da un error,yo lo he visto por encima y no lo he visto,tendras que pillarlo:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void mostrar(){
  5. FILE *fichero;
  6. char *palabra;
  7. char *p[10];
  8. int x =0;
  9. palabra = (char *) malloc (20 * sizeof(char));
  10. int j;
  11. fichero = fopen("leer.txt","r");
  12.  
  13. while (!feof(fichero)){
  14. fscanf(fichero,"%s",palabra);
  15. j = sizeof(palabra);
  16. x++;
  17. p[x] = palabra;
  18. printf ("%c",*p[x]);
  19. x++;
  20. p[x] = &palabra[j];
  21. printf("%c",*p[x]);
  22. printf("  ");
  23. fseek(fichero,1,SEEK_CUR);
  24. fflush(fichero);
  25. if (feof(fichero)){
  26. break;
  27. }
  28. }
  29.  
  30. free(palabra);
  31. fclose(fichero);
  32. }
  33.  
  34. int main(){
  35. mostrar();
  36. return 0;
  37. }
   


Un saludo