2012-01-01 26 views
9

Hoy en día, escribí un simple trozo de código que utiliza getchar() para contar los caracteres que introduzca. Pero cuando lo compilo en Cygwin, no funciona. Siempre imprime 0, pero nada Nunca entrada o no puedo entrada cualquier carácter que imprime 0.¿Por qué getchar() no funciona bien?

Sin embargo, si compilo con VC++ 6.0, funciona.

#include<stdio.h> 
int main(void) 
{ 
long nc; 

nc = 0; 
while(getchar() != EOF) 
    ++nc; 
printf("The total of characters you inputed is %ld.\n", nc); 
return 0; 
} 
+1

¿Qué estás usando para compilar el cygwin? Tengo cygwin y uso VC para compilar y esto funciona bien. – hmjd

+3

Su código exacto funciona perfectamente para mí en Cygwin (compilación con GCC). Tienes que presionar control-D para enviar un EOF. –

+1

¿Cómo * exactamente * estás ejecutando el programa? ¿Qué sucede cuando ejecutas 'echo hello | ./your_program' desde un prompt de Cygwin bash shell? ¿Qué pasa si escribe simplemente './Your_program', luego' hello', luego Enter, luego Control-D? –

Respuesta

0

This email thread habla de un error que se parece mucho a la suya, pero no puedo ver que hay alguna seguimientos a ella.

Me interesaría saber qué sucedió cuando intenta

while(getc(stdin) != EOF)

y si eso no funciona, intente while(fgetc(stdin) != EOF)

Todos ellos deben trabajar, aunque this página sugiere que podría haber diferencias de implementación entre estas funciones.

Otra cosa que podría intentar es para imprimir el valor ASCII de lo que se obtiene:

printf("%d\n",(int)getchar());

Además, trate de conducir la salida de un archivo en lugar de escribirlo en la consola. Crear un archivo input.txt, poner algunos caracteres en ella, y hacer

cat input.txt | ./program

EDIT: Usted escribe corriendo gato y tuberías funciona. Yo diría que simplemente actualice su versión de Cygwin. Has encontrado un error. Obtenga las versiones más recientes de Cygwin y el compilador, y debería estar listo para comenzar. Otra opción es usar scanf.

+0

while (getc (stdin)! = EOF) y wihle (fgetc (stdin)! = EOF) tampoco funcionan. Y "printf ("% d \ n ", (int) getchar());" imprime '-1'. Pero me encanta el input.txt del gato | ./a. Corre bien. Pero no puedo entenderlo, por qué puede funcionar bien. – yunfeng

+0

Actualiza tus herramientas. :) Además, intente ejecutar el programa usando cmd.exe en lugar del shell de Cygwin. ¿Eso funciona? –

+0

My Cygwin es [link] (http://www.cygwin.com/), así que creo que es la versión más reciente, pero uso cmd.exe para ejecutarlo. Funciona correctamente. – yunfeng

Cuestiones relacionadas