Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Neibar en 13 Junio 2012, 17:31 pm



Título: bucle, se come el primer scanf
Publicado por: Neibar en 13 Junio 2012, 17:31 pm
Código
  1. char coordenada1; int coordenada2;
  2. //preguntamos coordenadas
  3. printf("Introduce coordenada 1 (A-J) : ");
  4. scanf("%c", &coordenada1);
  5.  
  6. printf("Introduce coordenada 2 (0-9) : ");
  7. scanf("%d", &coordenada2);

Tengo esto en un bucle while, y la primera vez lo realiza bien, pero la segunda vez que lo introduzco,
el primer scanf, se lo come y me salta al segundo... Alguna idea?


Título: Re: bucle, se come el primer scanf
Publicado por: maxim_o en 13 Junio 2012, 17:46 pm
Mirate esto: http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

EL apartado de fflush(stdin);


Título: Re: bucle, se come el primer scanf
Publicado por: Neibar en 13 Junio 2012, 18:06 pm
Mirate esto: http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

EL apartado de fflush(stdin);


ok me lo reviso!

igualmente vi que cmbiando el...

Código
  1. scanf("%c", &coordenada1);

por

Código
  1. scanf("%s", &coordenada1);

ya funciona :)


Título: Re: bucle, se come el primer scanf
Publicado por: durasno en 13 Junio 2012, 18:38 pm
Asi puede que funcione pero no creo que sepas porque funciona; no es la forma correcta, el %s es para ingreso de cadenas.. Despues de cada scanf deberias agregar este bucle:
Código
  1. while(getchar()!='\n');
Lo que hace es limpiarte el bufer del teclado, esto evita los saltos que mencionas

Saludos


Título: Re: bucle, se come el primer scanf
Publicado por: Neibar en 14 Junio 2012, 23:32 pm
Asi puede que funcione pero no creo que sepas porque funciona; no es la forma correcta, el %s es para ingreso de cadenas.. Despues de cada scanf deberias agregar este bucle:
Código
  1. while(getchar()!='\n');
Lo que hace es limpiarte el bufer del teclado, esto evita los saltos que mencionas

Saludos

toda la razón, ;) añadido queda