Duda con el resultado del juez, no encuentro error

Hola, realice este ejercicio: http://juez.oia.unsam.edu.ar/#/task/ppt/statement con este código. Podrían indicarme el error?
Gracias.

#include <iostream>
using namespace std;
int main()
{
	char Ana [20]; 
	char Bartolo[20];
	cin>>Ana;
	cin>>Bartolo;
	if (((Ana=="Piedra")&&(Bartolo=="Tijera"))||((Ana=="Tijera")&&(Bartolo=="Papel"))||((Ana=="Papel")&&(Bartolo=="Piedra"))){
		cout<<"Ana";}
		else{
			if (((Ana=="Tijera")&&(Bartolo=="Piedra"))||((Ana=="Papel")&&(Bartolo=="Tijera"))||((Ana=="Piedra")&&(Bartolo=="Tijera"))){
						cout<<"Bartolo";}
						else{
							if (((Ana=="Piedra")&&(Bartolo=="Piedra"))||((Ana=="Tijera")&&(Bartolo=="Tijera"))||((Ana=="Papel")&&(Bartolo=="Papel"))){
										cout<<"Empate";}
									}
									}
								
	
     return 0;
}
1 me gusta

Ojo con varias cosas :face_with_monocle: :

  • char Ana [20] debería ser simplemente un string Ana, porque después lo vas a comparar contra un string (como “Piedra”, por ejemplo). Lo mismo con char Bartolo [20], obviamente. Ahora mismo esas comparaciones podrían dar cualquier cosa.
  • En la condición que define si gana Bartolo o no, la última condición dice: ((Ana=="Piedra")&&(Bartolo=="Tijera")), lo cual no es correcto porque en ese escenario ganaría Ana.

Comentarios sobre la escritura del código en sí :desktop_computer: :

  • Creo que esas 3 condiciones las podrías guardar en una variable de tipo bool a cada una para que se pueda leer más fácil la lógica del if.
  • La última condición la podés cambiar por simplemente Ana == Bartolo, fijate que eso alberga los tres casos según si ambos son “Piedra”, “Papel” o “Tijera”.
  • En vez de escribir algo de este estilo:
if (condicion_gana_Ana)
{
   ...
}
else
{
   if (condicion_gana_Bartolo)
   {
      ...
   }
   else
   {
      if (condicion_empate)
      {
         ...
      }
   }
}

Resulta igual de tedioso, pero considerablemente más claro escribir algo del estilo:

if (condicion_gana_Ana)
{
   ...
}
else if (condicion_gana_Bartolo)
{
   ...
}
else // equivalente en este caso a 'else if (condicion_empate)', pero no hace falta porque es el único caso restante
{
   ...
}
   

Eso es todo lo que vi, espero que te sea de ayuda.

2 Me gusta

Como para que se entienda sin confusión, a lo que se refiere Guty con que sean “string” en lugar de char [] es a usarlas de esta manera:

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string Ana; 
	string Bartolo;
	cin>>Ana;
	cin>>Bartolo;
       // Etc...
}

El tema es que el == con char [] no funciona (porque en realidad lo que hace es otra cosa diferente, que no es la que queremos de comparar los textos), en cambio con string el == (y el < y los demas) funcionan bien comparando los textos como nosotros queremos.

2 Me gusta