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ú

Mensajes - alfred_oh

#1
Gracias por la aclaración! ;) Aprovecho para preguntar si también sería necesario este vaciado de BUFFER DE ENTRADA tras usar gets(), este caso sería diferente pues gets() lee hasta el final, es decir, hasta encontrarse con el símbolo '\n' no? Luego no haría falta vaciado no?
#2
Muchas gracias por la explicación, sobre todo por la parte de "%d descarta los blancos". Con esa idea en la cabeza pude entenderlo fácilmente! Poniéndonos en otro situación, si por ejemplo introducimos:
" 123 {ENTER}"
En primer scanf lo que haría sería descartar el primer espacio y coger 123.
Luego el segundo scanf descartaría el segundo espacio, pero que hace con {ENTER}? Lo descarta también? Me imagino que si no? porque si no, no se quedaría esperando a que introduzcamos un número no? Entonces podríamos decir que %d descarta todo lo que no sea int?

PD: Gracias también por en enlace de "Lo que no hay que hacer en C/C++. Nivel basico"! Lo revisaré!
#3
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!