printf no imprime en la consola

Me estoy iniciando en el lenguaje C. Estoy usando eclipse (juno) como mi IDE y he instalado el complemento CDT. También desempaqué mingw64 (comstackdor GCC). Escribí un progtwig muy simple para ver si funciona. Este es mi código:

#include  int main() { int age; printf("Hello, please enter your age:\n"); scanf("%d", &age); printf("Your age is %d", age); return 0; } 

El problema es que el búfer de salida se llena con el valor de cadena de la primera impresión, pero no lo envía a la consola. Tengo que ingresar un número, y solo entonces el buffer vierte todos los datos en la consola, así que veo la consola algo como esto:

 1 Hello, please enter your age: Your age is 1 

en lugar de lo que se espera que sea:

 Hello, please enter your age: 1 Your age is 1 

Ahora, descubrí que puedo usar fflush(stdout) después de la primera printf pero no creo que esta solución sea elegante e incluso necesaria. ¿Alguna idea sobre cómo puedo superar esto?

EDITAR – porque estoy aprendiendo esto en mi universidad, no puedo usar nada que no haya aprendido en el curso, así que solo puedo usar printf y scanf

NUEVA EDICIÓN – Creo que he encontrado una explicación para esto. Como dije, estoy enviando a la vista de la consola dentro de Eclipse. Lo extraño es que si compilo y ejecuto el progtwig desde la línea de comando de Windows, obtengo el resultado deseado. Por lo tanto, creo que Eclipse está escribiendo el resultado en un archivo y presentándolo en la ventana de la consola. ¿Cómo puedo forzar eclipse para abrir una ventana de línea de comando real en mis configuraciones de ejecución?

Aparentemente este es un error conocido de Eclipse. Este error se resuelve con la resolución de WONT-FIX. No tengo ni idea de por qué. aquí está el enlace: Eclipse C Console Bug .

La salida está amortiguada.

stdout es buffer de línea por defecto, lo que significa que ‘\ n’ se supone que limpia el búfer. ¿Por qué no está sucediendo en tu caso? No sé. Necesita más información sobre su aplicación / entorno.

Sin embargo, puede controlar el almacenamiento en búfer con setvbuf ():

 setvbuf(stdout, NULL, _IOLBF, 0); 

Esto forzará que stdout sea buffer de línea.

 setvbuf(stdout, NULL, _IONBF, 0); 

Esto forzará que stdout esté sin búfer, por lo que no necesitará usar fflush (). Tenga en cuenta que afectará gravemente el rendimiento de la aplicación si tiene muchas impresiones.

Intente configurar esto antes de imprimir:

 setvbuf (stdout, NULL, _IONBF, 0); 

Podría intentar escribir en stderr, en lugar de stdout.

 fprintf(stderr, "Hello, please enter your age\n"); 

También deberías echar un vistazo a este hilo relevante.

Como han señalado otros, la salida puede almacenarse en un búfer dentro de su progtwig antes de que una consola o shell tenga la oportunidad de verlo.

En los sistemas tipo Unix, incluidos los Mac, stdout tiene un buffer basado en líneas por defecto. Esto significa que su progtwig vacía su búfer stdout tan pronto como ve una nueva línea.

Sin embargo, en Windows, las nuevas líneas ya no son especiales y se usa el almacenamiento en búfer completo. Windows no es compatible con el búfer de línea en absoluto; ver la página msdn en setvbuf .

Por lo tanto, en Windows, un buen enfoque es cerrar por completo el almacenamiento stdout estándar de esta manera:

 setvbuf (stdout, NULL, _IONBF, 0); 
  1. En la carpeta del proyecto, crea un archivo de texto “.gdbinit”. Contendrá su configuración de depurador gdb
  2. Edite “.gdbinit” y agregue la línea (sin las comillas): “configure new-console on”
  3. Después de construir el proyecto, haga clic derecho en el proyecto Depurar> “Configuraciones de depuración”, como se muestra a continuación Configuración de depuración

  4. En la pestaña “depurador”, asegúrese de que el “archivo de comando GDB” apunta ahora a su archivo “.gdbinit”. De lo contrario, ingrese la ruta a su archivo de configuración “.gdbinit”: Configuración de Gdb

  5. Haga clic en “Aplicar” y “Depurar”. Debería lanzarse una línea de comando nativa de DOS como se muestra a continuación Consola

Agregue c:\gygwin\bin a la variable de entorno PATH ya sea como una variable de entorno del sistema o en su proyecto de eclipse (propiedades-> ejecutar / depurar-> editar)