Autor
|
Tema: Error funcion aleatoria. (Leído 3,954 veces)
|
0xDani
Desconectado
Mensajes: 1.077
|
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
|
|
|
En línea
|
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
Desconectado
Mensajes: 646
Divide y vencerás
|
Tienes algunos errores conceptuales, prueba así: #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.
|
|
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
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 EDITO:Siempre da wrong
|
|
« Última modificación: 31 Mayo 2012, 15:50 pm por daniyo »
|
En línea
|
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
Desconectado
Mensajes: 2.407
Deprecated
|
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 ... #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
|
|
« Última modificación: 1 Junio 2012, 21:21 pm por vertexSymphony »
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
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
|
|
|
En línea
|
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
Desconectado
Mensajes: 2.407
Deprecated
|
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 ) Saludos.
|
|
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
No tengo muy claro que son los contendores y eso, pero creo que mirare esa pagina a menudo si.
|
|
|
En línea
|
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
Desconectado
Mensajes: 646
Divide y vencerás
|
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.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
extraño error en vista de una funcion sencilla: Runtime error '75': Path/File
Programación Visual Basic
|
drakolive
|
9
|
15,592
|
9 Marzo 2012, 17:08 pm
por Sancho.Mazorka
|
|
|
[C++] Error en funcion..
Programación C/C++
|
Wazzp
|
2
|
2,724
|
28 Enero 2011, 19:47 pm
por Wazzp
|
|
|
Error con funcion if, me da error de sintaxis
Scripting
|
Danyel_Casvill
|
4
|
3,690
|
30 Abril 2011, 16:32 pm
por Danyel_Casvill
|
|
|
Error en programa generar clave aleatoria
Programación C/C++
|
pacosn1111
|
6
|
3,248
|
22 Mayo 2015, 10:05 am
por pacosn1111
|
|
|
Muebles Zoom usa una función aleatoria para ver las unidades en stock que quedan
Foro Libre
|
el-brujo
|
1
|
2,843
|
24 Septiembre 2022, 21:23 pm
por RicRed
|
|