Hack x Crack - Comunidad de Seguridad informática

Programación => C / C++ => Mensaje iniciado por: mevg en Abril 29, 2012, 09:31:05 am

Título: ayuda con un codigo ):
Publicado por: mevg en Abril 29, 2012, 09:31:05 am
que hay gente, aclarando que no soy tan bueno en la programacion pero le intento (:

me encargaron en la escuela un juego que sume las caras de dos dados y dependiendo el resultado me imprima en pantalla un numero
lo que yo quiero hacer es que el programa se repita hasta que el usuario lo decida y despues de tanto
intentar no se que estoy haciendo mal, al correrlo me lanza un resultado y pregunta que si quiere jugar otra vez? al darle una opcion no aparece nada pero si vuelvo a introducir la opcion aparece otra vez el juego deje en comentarios en el codigo varios experimetos mios :D


les dejo el codigo uso dev-c++

Código: [Seleccionar]
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

using namespace std;

int d1[6], d2[6];//los dados
int x, sum;
int opc;
int main()
{   srand(time(NULL));
    textcolor(GREEN);
    clrscr();
    while(opc!=1)
    {   
       for(x=0;x<6;x++)//aqui le doy los valores del 1 al 6 a los dados
       {
          d1[x]=x+1;
          d2[x]=x+1;
       }
       while(x<1)//esta no recuerdo por que la puse XD
       {   
            d1[x]=1+rand()%6;
            d2[x]=1+rand()%6;
            sum=d1[x]+d2[x];
            if(sum==4||sum==6||sum==12)
              {   cout<< sum <<" Ha Ganado  (:"<<"\n";
                  cout<<" Desea Jugar De Nuevo  (s/n)"<<"\n";
                  cin>>opc;
                 
              }
            else if(sum==1||sum==7||sum==9)
               {  cout<< sum <<" Ha Perdido ): " <<"\n";
                  cout<<" Desea Jugar De Nuevo  (s/n)"<<"\n";
                  cin>>opc;
                 
               }
            else if(sum==2||sum==3||sum==5)
               {   cout<< sum <<" Obtuvo 100 puntos :D "<<"\n";
                   cout<<" Desea Jugar De Nuevo  (s/n)"<<"\n";
                   cin>>opc;
                   
               }
            else if(sum==8||sum==10||sum==11)
               cout<< sum <<" Desea Jugar De Nuevo  (s/n)";
              cin>>opc;
                 
           
       }   
    }
   
             
    getch();   
}
Título: Re:ayuda con un codigo ):
Publicado por: ravenheart en Abril 29, 2012, 05:07:35 pm
1. No deberías usar conio.h. No es un encabezado estándar y el soporte es, en el mejor caso, inconsistente.

2. Cuando entras al segundo while, x vale 6, así que nunca entraría. Ese while sobra.

3. En el for inicializas los dados, pero al entrar en el while los vuelves a inicializar. El for sobra. Además, x se queda (como ya he dicho) con el valor 6, y estás accediendo a d1(x) y d2(x), pero d1 y d2 están declarados como int(6), con lo que cada array tiene 6 elementos, desde 0 hasta 5. Escribir en d1(6) o d2(6) es un error muy grave, y te está funcionando todo de casualidad, y en cualquier momento podría dejar de hacerlo. Además, solo necesitas dos dados, así que d1 y d2 pueden ser simples int.
Edit: cambio corchetes por paréntesis porque me salía un formato raro.

4. En el último else, no tienes llaves, así que el cout se ejecuta sólo si se cumple la condición, pero el cin se ejecuta *siempre*. Por eso, en todos los casos menos en ese, tienes que contestar dos veces la pregunta.

5. opc es un entero, pero le pides al usuario que introduzca s/n, con lo que después del cin siempre valdrá 0. opc tiene que ser de tipo char, y debes compararlo con 's' (o con 'n').

6. Yo cambiaría el bucle externo por un
Citar
do
{
    ...
} while (opc...);
aunque esto ya es en parte cuestión de gusto personal.

Eso es todo, creo...
Título: Re:ayuda con un codigo ):
Publicado por: mevg en Abril 29, 2012, 11:31:42 pm
ok lo de opc en el codigo se me olvido cambiarlo, tenia distintas variables y al final deje esa pero bueno
gracias por tu respuesta voy a  hacer varios cambios en mi codigo ;)