Error funcion aleatoria.

Iniciado por 0xDani, 30 Mayo 2012, 19:42 PM

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

0xDani

Bueno estoy haciendo un programa muy basico que te da una palabra en ingles seleccionada aleatoriamente y te la pide en español. El problema es que cuando lo ejecuto siempre sale la palabra "Asustado", aunque vuelva a compilar, y que, aunque ponga "h" en vez de "scared" me sale que es correcto. Dejo el code y espero que me puedan ayudar:


#include <cstdlib>
#include <iostream>

using namespace std;

char palabra[35];
int c;

int main(){
  c=(1 + rand() % 2);
  switch (c)
  {
   case 1: {cout <<"Ligth\n"<<"Introduce la palabra y pulsa enter:";  cin >> (palabra); if (palabra=="ligero" || "Ligero" || "Luz"){cout << "Rigth!";} else {cout << "Wrong!";}} break;
   case 2: {cout <<"Asustado\n"<<"Introduce la palabra y pulsa enter:"; cin >> palabra; if (palabra=="scared" || "Scared") {cout << "Rigth!";} else {cout << "Wrong!";} } break;
   default: {cout <<"Se produjo un error";}
  }return 0;
}


Saludos y gracias de antemano;D
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Valkyr

Tienes algunos errores conceptuales, prueba así:

Código (cpp) [Seleccionar]

#include <cstdlib>
#include <iostream>

using namespace std;

char palabra[35];
int c;

int main(){
  c=(1 + rand() % 2);
  switch (c)
  {
   case 1:
      cout <<"Ligth\n"<<"Introduce la palabra y pulsa enter:";
      cin >> (palabra);
      if (palabra=="ligero" || palabra=="Ligero" || palabra=="Luz"){
         cout << "Rigth!";
      }
      else{
         cout << "Wrong!";
      }
      break;

   case 2:
      cout <<"Asustado\n"<<"Introduce la palabra y pulsa enter:";
      cin >> palabra;
      if (palabra=="scared" || palabra=="Scared"){
          cout << "Rigth!";
      } else {
          cout << "Wrong!";
      }
      break;

   default:
      cout <<"Se produjo un error";
  }
  return 0;
}


Si te fijas los cambios están dentro del if. Tienes que escribir la condición de forma completa, es decir, no puedes decir que una variable sea igual a un valor u otro de esta forma: variableA == 2 || 3, tendrías que hacerlo de forma completa: variableA == 2 || variableA == 3. Si lo dejas como tú lo tenías puesto, si no me equivoco estaría comprobando que la cadena "Ligero" o "Luz" o "Scared" es distinta del valor nulo, pero no estoy seguro al 100%.

Si estás intentando aprender C++ por tu propia cuenta te recomiendo que leas algún libro básico sobre programación y posteriormente algún libro básico sobre C++, por el foro hay millones de recomendaciones.

Saludos.

0xDani

#2
Muchas gracias, ahora lo entiendo, estaba haciendo que saltase rigth si Luz o ligero se verificaban True, creo, y que lo son por defecto.

Sin embargo, aunque ya funcionan las condiciones sigue fallando la funcion aleatoria, ya que al ejecutarlo me sigue saliendo siempre "Asustado".

Saludos y gracias ;D

EDITO:Siempre da wrong
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Foxy Rider

#3
Valkyr, tu código tiene MUCHOS errores fundamentales de concepto, te invito a releer sobre punteros, vectores, sobrecarga de operadores, tipos de datos y demás ... estas comparando un puntero con otro, no estas comparando palabras y el tema del case de las cadenas se te transpapelo, la semilla, etc ...

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
#include <algorithm>


using namespace std;


int main(int argc, char* argv[])
{
   srand(time(0));
 
   string inputWord;
   int randomNumber = rand()%2+1; // rand()%maximo+minimo
   
   if ( randomNumber == 1) cout << "Palabra : Light ";
     else if ( randomNumber == 2) cout << "Palabra : Asustado ";
   cout << endl << "Introduce su traduccion y pulsa enter : ";

   cin >> inputWord;
     transform(inputWord.begin(),inputWord.end(),inputWord.begin(),::tolower); // todo a minusculas (!)

   if ( randomNumber == 1 && (inputWord == "ligero" || inputWord == "luz") ) cout << endl << "Correcto !!" << endl;
     else if ( randomNumber == 2 && inputWord == "scared" ) cout << endl << "Correcto !!" << endl  ;
   else cout << "Incorrecto" << endl;

   return EXIT_SUCCESS;
}



El mío también está feo, podría haberlo alargado más agregando un switch (para dos opciones? :S), hacer que consuma más instrucciones y que sea más lindo ... pero ni ganas x'3
La cosa es que funciona y todo esta en las references :D

0xDani

Ahora si funciona! Gracias por el code. Que tenga solo dos opciones es porque es solo una prueba jeje
Y no sabia que con la biblioteca string se podia declarar una variable de tipo string. Lo unico que sigo sin entender es la parte donde esta la funcion tansform. Supongo que es de la biblioteca algorithm, pero no la conozco.

Saludos ;D
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Foxy Rider

Sí, debí haber evitado transform, pero por las malas aprendí que es mejor ir metiendo bocadillos de la STL desde temprano, sino siguen con costumbres raras de programar en C, pero en otro paradigma, osea x'3

No sé si sabrás sobre contenedores/containers e iteradores/iterators (si no, podés dar una vuelta por el buscador que SEGURO que encontrás una explicación simplificada, SEGURO) ... pero std::transform (sí, es de algorithm) recorre un contenedor desde posición X a Y (en el caso ese, begin() y end(), de principio a fin del contenedor), le aplica W en cada elemento (en este caso aplica tolower, que sirve para pasar a minúscula un caracter ... y sobre cada caracter, que es el "elemento" de un string) y lo almacena en Z (de nuevo, uso begin() para obtener el iterador al principio del contenedor).

chusmeá la info acá : http://www.cplusplus.com/reference/algorithm/transform/ (bah, esa web es genial, probablemente la uses seguido :D)

Saludos.

0xDani

No tengo muy claro que son los contendores y eso, pero creo que mirare esa pagina a menudo si.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Valkyr

Confusión mía, pensaba que estaba declarado como string en lugar de char[] y podía hacer la comparación tal cual por la sobrecarga del operador.

Saludos.