SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Anthares en Domingo 6 de Abril de 2008, 04:41

Título: Problema Con Entrada Estandar En C
Publicado por: Anthares en Domingo 6 de Abril de 2008, 04:41
Hola  :o  tengo quiero leer de la entrada estandar de a un carácter, ya sea una letra del alfabeto, un símbolo especial, fin de linea etc… hasta que agluien ingrese un fin de archivo, es decir un "control + d".

Para ello probe en usar: fgetc, getc, getchar.
Hago un ciclo while carácter leido sea distinto de EOF.

Pero sucede algo que no quiero y no se como solucionarlo.

Si ejecuto mi programa e ingreso minimo un carácter  y hago control + d  no se termina si no que tengo que por segunda vez hacer control + d.

Si por otro lado minomo ingreso un carácter luego hago control + d luego ingreso minimo un carácter luego contol + d no sale, es decir solo sale si hago dos veces consecutivas control +d.

Pero yo quiero que cuando hago control +d  finalize y no tenga que hacerlo dos veces consecutivas.

Que puedo estar haciendo mal ¿??????

Por ejemplo si ejecutan este codigo van a ver que les pasa eso:

#include <stdio.h>
int main()
{

while( EOF != getc(stdin));


return 0;
}

A una cosa mas, no me sirve hacer control + c por que eso hace que termine la ejecución abruptamente yo solo quiero que cuando haga una vez sola control + d termine de leer de la entrada estandar para hacer otra cosa.


Espero que alguien me de una mano  :huh:  saludos
Título: Re: Problema Con Entrada Estandar En C
Publicado por: grandzam en Domingo 6 de Abril de 2008, 09:51
Ya intentaste con esto:

Código: Text
  1.  
  2. while( !feof(stdin)){
  3.   scanf(&#34;%s&#34;,string);
  4. }
  5.  
  6.  

Bueno yo creo que asi deberia funcionar, pruebalo...

Ah por cierto, probe el tuyo en mi ubuntu y funciono bien, se sale cuando presiono ctrl+d sin importar nada, no tuve que hacerlo dos veces...
Título: Re: Problema Con Entrada Estandar En C
Publicado por: Anthares en Domingo 6 de Abril de 2008, 14:26
Hola muchas muchas gracias lo voy a intentar con eso.

Tambien te cuento que vi en el deitel que dice que en los sistemas Linux el EOF se ingresa con <enter> + <control + d >

Intente con eso y lo que yo habia hecho funciono como  yo queria pero voy a intentar con lo tuyo por que si anda esta mucho mejo que no tenga que entrar un enter antes

Saludos y muchas muchas gracias  :D  :lol:
Título: Re: Problema Con Entrada Estandar En C
Publicado por: Amilius en Miércoles 9 de Abril de 2008, 05:12
Sería bueno que guardes en una variable lo que obtienes de getc(stdin) y compares el EOF con la variable.

¿Será que en alguna parte de tu ciclo while vuelves a leer un caracter con getc(stdin) y es por eso que necesitas 2 control+D: uno para cada getc que tienes dentro del ciclo?