ayuda repeticion

Iniciado por Choke1, 8 Mayo 2015, 18:14 PM

0 Miembros y 1 Visitante están viendo este tema.

Choke1

Tengo el siguiente codigo:

Código (cpp) [Seleccionar]
 char fichaX = 'x',fichaC= 'o';
 char jug1,jug2,temp;
 
 
 do{
 printf("introduce ficha jug 1  x o o: ");
 scanf("%c",&jug1);
 }while(jug1!=fichaX || jug1!=fichaC);

 
Y el problema es que al introducir cualquier letra me repite dos veces seguidas el printf aunque introduzca tb la x || o

A que puede deberse?

Mod: Los códigos deben ir en etiquetas GeSHi

Choke1


rir3760

El problema se debe a que el especificador "%c" se traga (procesa) el primer carácter que se encuentre en la entrada estándar sin importar cual sea este. Si tu tecleas:
x{ENTER}
Ahí tienes dos caracteres ('x' y '\n') los cuales generan el comportamiento que mencionas.

Para solucionarlo, esto es, descartar el espacio blanco inicial de forma similar a los otros especificadores como "%d", "%s", etc. basta con utilizar " %c" (un espacio antes de caracter '%').

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Choke1

Gracias y sabes porque si meto x ó o y me sigue sin salir del bucle??

rir3760

Porque estas utilizando el operador OR cuando deberías utilizar AND. Cambia el bucle a:
do {
   printf("introduce ficha jug 1  x o o: ");
   fflush(stdout);
   scanf(" %c", &jug1);
}while (jug1 != fichaX && jug1 != fichaC);


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Choke1

Claro joder XD gracias por la ayuda!!