variable - printf no imprime en la consola
python print carriage return no line feed (7)
- En la carpeta del proyecto, crea un archivo de texto ".gdbinit". Contendrá su configuración de depurador gdb
- Edite ".gdbinit" y agregue la línea (sin las comillas): "configure new-console on"
Después de construir el proyecto, haga clic derecho en el proyecto Depurar> "Configuraciones de depuración", como se muestra a continuación
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":
Haga clic en "Aplicar" y "Depurar". Debería lanzarse una línea de comando nativa de DOS como se muestra a continuación
Me estoy iniciando en el lenguaje C. Estoy usando eclipse (juno) como mi IDE y he instalado el complemento CDT. También desempaqué mingw64 (compilador GCC). Escribí un programa muy simple para ver si funciona. Este es mi código:
#include <stdio.h>
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 programa 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?
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)
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 .
Como han señalado otros, la salida puede almacenarse en un búfer dentro de su programa 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 programa 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);
Intente configurar esto antes de imprimir:
setvbuf (stdout, NULL, _IONBF, 0);
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.
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 this hilo relevante.