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
while( !feof(stdin)){
scanf("%s",string);
}
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?