C/C++ printf() antes del problema scanf()
Estoy usando Eclipse para codificar en C/C++ y estoy luchando con lo que podría ser algo bastante fácil. En mi código a continuación uso printf()
y después scanf()
. Aunque printf
se escribe antes, scanf()
la salida difiere. Pude descubrir algo sobre un problema similar aquí . Pero no pude solucionarlo. ¿Algunas ideas?
Código:
#include <stdio.h>
int main()
{
int myvariable;
printf("Enter a number:");
scanf("%d", &myvariable);
printf("%d", myvariable);
return 0;
}
Rendimiento esperado:
Enter a number:1
1
En lugar de eso obtengo:
1
Enter a number:1
Su salida se está almacenando en buffer. Tienes 4 opciones:
rubor explícito
fflush
después de cada escritura para aprovechar el búfer y seguir aplicando explícitamente el comportamiento/visualización deseado.fflush( stdout );
tener el búfer solo en líneas de búfer
útil para cuando sabes que es suficiente imprimir solo líneas completas
setlinebuf(stdout);
desactivar el buffer
setbuf(stdout, NULL);
deshabilite el almacenamiento en búfer en su consola a través del menú de opciones que proporciona
Ejemplos:
Aquí está su código con la opción 1:
#include <stdio.h>
int main() {
int myvariable;
printf("Enter a number:");
fflush( stdout );
scanf("%d", &myvariable);
printf("%d", myvariable);
fflush( stdout );
return 0;
}
Aquí hay 2:
#include <stdio.h>
int main() {
int myvariable;
setlinebuf(stdout);
printf("Enter a number:");
scanf("%d", &myvariable);
printf("%d", myvariable);
return 0;
}
y 3:
#include <stdio.h>
int main() {
int myvariable;
setbuf(stdout, NULL);
printf("Enter a number:");
scanf("%d", &myvariable);
printf("%d", myvariable);
return 0;
}
Ok, finalmente usé algo similar a lo que @zsawyer escribió como una opción etiquetada como 3. En mi código inserté esta línea:
setvbuf(stdout, NULL, _IONBF, 0);
Como primera línea en main():
#include <stdio.h>
int main()
{
setvbuf(stdout, NULL, _IONBF, 0);
int myvariable;
printf("Enter a number:");
scanf("%d", &myvariable);
printf("%d", myvariable);
return 0;
}
Lo saqué de aquí .