Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Quieroaprenderprogramacio en 17 Febrero 2019, 06:07 am



Título: Necesito ayuda
Publicado por: Quieroaprenderprogramacio en 17 Febrero 2019, 06:07 am
Hola soy nuevo usando dev c++, y queria hacer como un tipo de examen de preguntas abiertas, ejemplo:

¿Que te pertenece y todo el mundo lo utiliza?

la respuesta seria el nombre,

y lo que hasta ahora he logrado es que justo despues de poner la pregunta pueda poner la respuesta, pero la respuesta no he logrado que sea el nombre, ya que la unica manera en la que he logrado que funcione es dando opciones 1,2 y 3, o algo menos alejado ha sido "El" no "El nombre" y darle un valor a la respuesta si es correcta, si es correcta 1 si no -1 igual con la sig pregunta y pues queria ayuda para poder lograrlo.



Título: Re: Necesito ayuda
Publicado por: Pedrocasty en 17 Febrero 2019, 21:15 pm
buenas, has probado a guardar una variable string, que sea igual a `el nombre`;
y si la respuesta es igual a esa variable que haga un cout de es correcto. Repito estoy empezando también


Título: Re: Necesito ayuda
Publicado por: Quieroaprenderprogramacio en 17 Febrero 2019, 23:06 pm
Voy a intentarlo, gracias.


Título: Re: Necesito ayuda
Publicado por: 0xDevC en 18 Febrero 2019, 00:58 am
Se que ya te han dado la respuesta pero esta tarde tambien te la iba a dar anexandole el codigo pero como me fallaba decidí no enviarlo, entonces simplemente dejaré el codigo ahora que si me funciona como es debido.


#include <iostream>
#include <string.h>

using namespace std;

int main(){
   
   string resp;
   
   cout<<"¿Que te pertenece y todo el mundo lo utiliza?"<<endl;
   cin>>resp;
   
   if (resp == "el nombre", "El nombre")
   {
      cout<<"Respuesta correcta !";
   }
   else
   {
      cout<<"Respuesta incorrecta !";
   }
   
   
   cin.get();
   return 0;
}

Tengo un curso de c++ que incié ayer, talvez te interesaría, tambien soy nuevo e inicie ese curso para aprender junto a los demas  :D

https://goo.gl/h8boEX


Título: Re: Necesito ayuda
Publicado por: EdePC en 18 Febrero 2019, 02:12 am
Código
  1. if (resp == "el nombre", "El nombre")

- Que clase de brujería es esa :xD, no lo encuentro en mis libros pero funciona  :o ( corrijo, trabaja como un if (true) )


Título: Re: Necesito ayuda
Publicado por: Pedrocasty en 18 Febrero 2019, 11:12 am
ajjajaajajja lo de la , es verdad que arece que funciona pero sustituyelo por una puerta or ||  , es mas profesiona, supongo


Título: Re: Necesito ayuda
Publicado por: MAFUS en 18 Febrero 2019, 14:23 pm
El operador coma no es para eso.
Es el operador binario de menor prioridad. Funciona así:
Evalúa el primer operando y descarta el valor, después evalúa el siguiente operando y regresa su valor. Tal y cómo está en el código primer evaluará respuesta=="el nombre" y descartará el respuesta, después evaluará "El nombre" y devolverá su dirección, que cómo no será NULL el if lo tratará como true. Básicamente es un if(true).


Título: Re: Necesito ayuda
Publicado por: EdePC en 18 Febrero 2019, 14:34 pm
- Anda, cierto, no habia probado una respuesta incorrecta, jeje, con tanto cambio que he visto en C++ pensé que estaba facilitando el uso de expresiones booleanas como Python XD.


Título: Re: Necesito ayuda
Publicado por: K-YreX en 19 Febrero 2019, 14:29 pm
Además de lo ya comentado no puedes usar <cin> para la entrada de datos. Ya que <cin> sólo almacena hasta el primer espacio. Por lo que si introduces "el nombre" mediante un <cin>, en la variable sólo se almacenará "el".
Para solucionar eso te recomiendo usar <getline()>. Suerte :-X

PD: Si quieres ampliar un poco el programa te recomiendo transformar toda la solución a minúsculas y comparar sólo con "el nombre". Por si se da el caso de que alguien lo escribe en mayúsculas.


Título: Re: Necesito ayuda
Publicado por: Quieroaprenderprogramacio en 25 Febrero 2019, 00:33 am
Gracias a todos, ya he podido poner incluso mas de solo 1 pregunta.

int main(){
   system("color 70");
   int t;
   
   char r1[50];
   char r2[] = "Si";
   char r3[50];
   char r4[] = "El nombre";
   
     
   
   cout<<"(Todas las respuestas deben ser contestastas con la letra inicial en mayusculas, una respuesta correcta vale 10 puntos, una erronea vale -5)"<<endl;
   
   do{
      cout<<"Listo (Si o No): ";
      gets(r1);
      if(strcmp(r1,r2)!=0){
      }
   }while(strcmp(r1,r2)!=0);
   
   cout<<"\nBien empecemos..."<<endl;
   //
   cout<<"\n(P1)...Que te pertenece que todo el mundo usa? ";
   gets(r3);
   if(strcmp(r3,r4)==0){
      t=0+10;
      cout<<"Corecto... Puntuacion: "<<t<<endl;
   }
   else{
      t=0-5;
      cout<<"Incorrecto, respuesta correcta..... (El nombre) ... puntuacion: "<<t<<endl;
   }

   
   cout<<"\n\n\n";
   system("pause");
   return 0;
}


 ;D ;D ;D


Título: Re: Necesito ayuda
Publicado por: K-YreX en 25 Febrero 2019, 00:58 am
Bueno, vamos a ir revisando cosas del código:
Lo primero de todo, cuando pongas un código usa las etiquetas de código GeSHi.
  • <gets()> no es muy recomendable para guardar cadenas ya que es poco seguro. Su variante más segura es <fgets()> (tiene otros parámetros pero puedes encontrar información al respecto en cualquier web/libro.
  • En el filtro del <do while> tienes un condicional <if> vacío. Además es más usual hacerlo con (s/n) y así sólo tienes que manejar un caracter en al comprobación y no una cadena.
Código
  1. char opcion;
  2. do{
  3.    cout << "Empezar (s/n): ";
  4.    cin >> opcion;
  5. }   while(opcion != 's' || opcion != 'S');

  • Te recomiendo usar strings en lugar de cadenas de caracteres estilo C. Son más fáciles de manejar y no tienes que reservar arrays de tamaño aleatorio.
  • Te recomiendo usar <getline()> mejor que <gets()> o <fgets()>. También puedes encontrar cómo funciona en webs/libros.
  • Usa nombres de variables que te ayuden a seguir el programa. Imagina un programa enorme donde usas <t> <r1> <r2>... :-\ Mejor nombres como <puntuacion> <respuesta_usuario> <respuesta_correcta>...
  • No es necesario el 0 en <t = 0 + 10> ni en <t = 0 - 5>. Como mucho para acumular resultados pero en ese caso sería <t += 10> y <t -= 5>.
  • Cambia el <system("pause")> por <cin.get()>. La función va a ser la misma y evitas hacer una llamada al sistema totalmente innecesaria y costosa.