Consigna con EOF > No se aplicarlo .

Iniciado por axeelcs, 13 Agosto 2011, 13:58 PM

0 Miembros y 1 Visitante están viendo este tema.

axeelcs

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

Gallu

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
Saludos
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.

PiroskY

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?

axeelcs

Es en c el programa .
Osea el ejemplo sería así:

CitarEjemplo:   Hoy hay parcial de estructuras
                          Hy hy pl de es

Dark Invader

¿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

Darkgold9

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



     

axeelcs

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.

Dark Invader

#7
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