Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - alfred_oh

#1
Hola tengo el siguiente programa en c y la verdad no me queda muy claro de que manera afecta scanf() al buffer de teclado.


#include <stdio.h>

int main(void){
   int a;
   int b;
   printf("ingrese el valor de a: \n");
fflush(stdin);
   scanf("%d",&a);
fflush(stdin);
   printf("ingrese el valor de b: \n");
   scanf("%d",&b);
fflush(stdin);
   printf("\n a= %d\n",a);
   printf("\n b= %d\n",b);
return 0;
}


Yo lo que quiero es que mi programa lea el valor de a y el valor b por separado y luego lo saque por pantalla. El problema era cuando introducía para "a" varios números separados por espacio y apretaba enter p.e.: "1 2 3 4 5 \n" me imprimía a=1 y b=2. Por ahí leí que esto era porque lo último que introduzco por el teclado es enter, por lo tanto esa tecla se queda almacenada allí, en el buffer ¿Eso es así? ¿De que manera influye el hecho de introducir enter en el buffer del teclado? Estuve investigando y leí que la solución era vaciar el buffer para esto utilice fflush() pero creo que no funciona para vaciar este tipo de buffer. Así que seguí buscando y sugerían en un foro(de hace unos años atrás) utilizar "while(getchar()!='\n');" Modifiqué mi código y quedó así:


int main(void){
   int a;
   int b;
   printf("ingrese el valor de a: \n");
   scanf("%d",&a);
while(getchar()!='\n');
   printf("ingrese el valor de b: \n");
   scanf("%d",&b);
   printf("\n a= %d\n",a);
   printf("\n b= %d\n",b);
return 0;
}

Ya no tenía este problema. Lo que pasa es que tampoco entiendo como "while(getchar()!='\n');" me ayuda. Lo que entiendo que hace esa línea es "sacar del buffer" todos los símbolos menos el "\n", luego el símbolo que queda en el buffer de teclado es "\n", entonces realmente no esta vacío no? Alguien puede explicármelo porfavor! Gracias!