Test Foro de elhacker.net SMF 2.1

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í:
CitarLeer 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 (cpp) [Seleccionar]
cout << texto[0];

for(int x=1 ; texto[x] ; x++)
   if(texto[x] == ' ')
       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í:

CitarEjemplo:   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.
FILE *f;
f=fopen(nombrefich,"r");

        -Hacer la funcion que te pide.
        -Comprobar si se ha terminado con EOF:
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 :

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:

#include <stdio.h>
#include <stdlib.h>

void mostrar(){
FILE *fichero;
char *palabra;
do{
char *p[10];
palabra = (char *) malloc (20 * sizeof(char));
int j;
fichero = fopen("leer.txt","r");
fscanf(fichero,"%s",palabra);
setbuf(stdin,NULL);
j = sizeof(palabra);
p[0] = palabra;
printf ("%c",*p[0]);
p[1] = &palabra[j];
printf("%c",*p[1]);
fseek(fichero,1,SEEK_CUR);
if (feof(fichero)){
break;
}
fscanf(fichero,"%s",palabra);
setbuf(stdin,NULL);
j = sizeof(palabra);
p[2]= palabra;
printf(" ");
printf ("%c",*p[2]);
p[3] = &palabra[j];
printf("%c",*p[3]);
fseek(fichero,1,SEEK_CUR);
if (feof(fichero)){
break;
}
//esa es la idea principal,continua desde aqui
//tambien podrias definir una variable llamada x con un valor 0,hacer un do-while e ir aumentando el numero del punteroasi p[++x]
//pasaria de p[0] a p[1].
}while(1);
fclose(fichero);
}

int main(){
mostrar();
getchar();
return 0;
}

   
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:

#include <stdio.h>
#include <stdlib.h>

void mostrar(){
FILE *fichero;
char *palabra;
char *p[10];
int x =0;
palabra = (char *) malloc (20 * sizeof(char));
int j;
fichero = fopen("leer.txt","r");

while (!feof(fichero)){
fscanf(fichero,"%s",palabra);
j = sizeof(palabra);
x++;
p[x] = palabra;
printf ("%c",*p[x]);
x++;
p[x] = &palabra[j];
printf("%c",*p[x]);
printf("  ");
fseek(fichero,1,SEEK_CUR);
fflush(fichero);
if (feof(fichero)){
break;
}
}

free(palabra);
fclose(fichero);
}

int main(){
mostrar();
getchar();
return 0;
}

   


Un saludo