• Viernes 8 de Noviembre de 2024, 23:26

Autor Tema:  Programa retorna al menu despues de intentar usarlo 2 veces  (Leído 1497 veces)

Claudisimo

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Programa retorna al menu despues de intentar usarlo 2 veces
« en: Sábado 30 de Mayo de 2009, 01:26 »
0
Hola, una vez mas recurro a ustedes para resolver una duda que me tiene muy cabreado. Llevo bastante rato tratando de ver el error pero no logro encontrarlo. Estoy programando el ahorcado (bajo codeblocks con mingw), sin funciones, y el programa corre 1 vez bien (aun no hago el dibujo en todo caso). Después (ya sea se gane o pierda) vuelve al menú, ejecuto otra vez el juego y pide el nombre del archivo (las palabras deben venir de un archivo). Cuando lo ingreso nuevamente, o ingreso otro archivo el programa vuelve al menú, siendo que debería funcionar otra vez.

Aqui está el código, espero alguien pueda responderme. Perdonen pero soy bastante desordenado:

Código: C++
  1.  
  2. //Trabajo 1 Laboratorio Algoritmos y estructura de datos
  3. #include<iostream>
  4. #include<string>
  5. #include<fstream>
  6. #include<string>
  7. #include<stdlib.h>
  8. #include<conio.h>
  9. using namespace std;
  10.  
  11. int main ()
  12. {
  13.     char nombrearchivo[50],a,palabra[30],palabragen[30],repetido,palabraaux[30],letra[1],salcont[1];
  14.     int n,contadorletras,i,q,w,e,u,k,t,m,x;
  15.     bool marcador;
  16.     ifstream archivo;
  17.     while(m!=0)
  18.     {
  19.         nombrearchivo[0]='';
  20.         salcont[0]='.';
  21.         marcador=0;
  22.         n=0;
  23.         k=0;
  24.         u=0;
  25.         q=0;
  26.         i=0;
  27.         n=0;
  28.         w=1;
  29.         x=0;
  30.         cout<<"Bienvenido al ahorcado, porfavor indique su opción"<<endl<<endl;
  31.         cout<<"1.-"<<'t'<<"Jugar al ahorcado (por defecto)"<<endl;
  32.         cout<<"0.-"<<'t'<<"Salir del programa"<<endl;
  33.         cin>>m;
  34.         system("cls");
  35.         switch(m)
  36.         {
  37.             case 1:
  38.             {
  39.                 cout<<"Ingrese el nombre del archivo a trabajar"<<endl;
  40.                 cin>>nombrearchivo;
  41.                 system("cls");
  42.                 archivo.open(nombrearchivo);
  43.                 while(salcont[0]!='-')
  44.                 {
  45.                     archivo.get(a);
  46.                     palabra[n]=a;
  47.                     if (palabra[n]==' ')
  48.                         palabra[n]='n';
  49.                     palabragen[i]=palabra[n];
  50.                     palabraaux[i]=palabra[n];
  51.                     if ((palabra[n]=='n' && i>=3 && i<=7) || archivo.eof())
  52.                     {
  53.                         if (i==0)
  54.                         {
  55.                             salcont[0]='-';
  56.                             break;
  57.                         }
  58.                     for(q=0;q<i;q++)
  59.                         palabraaux[q]='-';
  60.                     for(q=i;q<=30;q++)
  61.                         palabraaux[q]=' ';
  62.                     cout<<"Ingresa una letra para adivinar la palabra y salvar al hombre de ser ahorcado. Guiate por la pista"<<endl<<endl;
  63.                     cout<<endl<<"La palabra tiene "<<i<<" letras."<<endl;
  64.                     if(i==0)
  65.                         salcont[0]=='-';
  66.                     system("pause");
  67.                     while(u<6)
  68.                     {
  69.                         system("cls");
  70.                         cout<<"Acertadas: "<<k<<" de "<<i;
  71.                         cout<<endl<<endl<<palabraaux<<endl;
  72.                         q=0;
  73.                         letra[0]=getche();
  74.                         while(q<i)
  75.                         {
  76.                             e=0;
  77.                             t=0;
  78.                             if(palabraaux[q]==letra[0])
  79.                             {
  80.                                 while(t<=i)
  81.                                 {
  82.                                     while(e<=i)
  83.                                     {
  84.                                         if(palabraaux[e]==letra[0])
  85.                                         {
  86.                                             cout<<endl<<"La letra "<<letra[0]<<" ya se encuentra ingresada"<<endl<<"Ingrese otra letra"<<endl;
  87.                                             t=0;
  88.                                             letra[0]=getche();
  89.                                         }
  90.                                         else
  91.                                             t++;
  92.                                     e++;
  93.                                     }
  94.                                 e=0;
  95.                                 }
  96.                             }
  97.                             if (palabragen[q]==letra[0])
  98.                             {
  99.                                 system("cls");
  100.                                 palabraaux[q]=palabragen[q];
  101.                                 k++;
  102.                                 cout<<endl<<endl<<palabraaux<<endl;
  103.                                 marcador=1;                             //marcador indica si le acerto a la palabra, asi no perderá una oportunidad. Por defecto está en 0 a menos que acierte
  104.                             }
  105.                             else
  106.                             {
  107.                                 system("cls");
  108.                                 cout<<endl<<endl<<palabraaux<<endl;
  109.                             }
  110.                         q++;
  111.                         }
  112.                     if(marcador==0)
  113.                         u++;
  114.                     marcador=0;
  115.                     if(u>=6)
  116.                     {
  117.                         cout<<"Ha perdido, suerte a la proxima."<<endl;
  118.                         salcont[0]='-';
  119.                         system("pause");
  120.                         system("cls");
  121.                         break;
  122.                     }
  123.                     if(k==i)
  124.                     {
  125.                         cout<<"Felicidades, ha acertado la palabra. Para continuar jugando, ingrese cualquier tecla. Para salir del juego presione -"<<endl;
  126.                         cin>>salcont;                   //salcont saldrá del programa si el usuario presiona -
  127.                         if(salcont[0]=='-')
  128.                             break;
  129.                         system("cls");
  130.                         u=6;
  131.                     }
  132.                     if(salcont[0]=='-')
  133.                         break;
  134.                     }
  135.                     i=-1;
  136.                         k=0;
  137.                     if(salcont[0]=='-')
  138.                         break;
  139.                     }
  140.                 else if (palabra[n]=='n')
  141.                     i=-1;
  142.                 if(salcont[0]=='-')
  143.                     break;
  144.                 i++;
  145.                 q=0;
  146.                 e=0;
  147.                 w=1;
  148.                 u=0;
  149.                 k=0;
  150.                 e=0;
  151.                 n=0;
  152.                 }
  153.                 archivo.close();
  154.             }
  155.             case 2 :
  156.                 {
  157.                     m=2;
  158.                     cout<<"hola";
  159.                     break;
  160.                 }
  161.             default: 1;
  162.         }
  163.     }
  164.     cout<<"Gracias por jugar"<<endl;;
  165. }
  166.  
  167.  

Aqui hay unas palabras para probar. Es cosa de copiar y pegar en un archivo y ponerlo en el programa, por si alguien quiere probarlo

Código: Text
  1. esta
  2. es
  3. una
  4. primera
  5. prueba
  6. basicamente
  7. para
  8. probar
  9. todas
  10. las
  11. opciones
  12.  


Porfavor, les agradeceria ayuda. De verdad no entiendo por que en vez de continuar el programa vuelve al menu a la hora de pedir el archivo la segunda vez. Muchas gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Programa retorna al menu despues de intentar usarlo 2 veces
« Respuesta #1 en: Sábado 30 de Mayo de 2009, 10:36 »
0
Depuralo ... igual algo que seguramente esta mal es la linea 65, estas usando == y eso no hace nada.

VC++: x.cpp(65) : warning C4553: '==' : operator has no effect; did you intend '='?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Claudisimo

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Programa retorna al menu despues de intentar usarlo 2 veces
« Respuesta #2 en: Sábado 30 de Mayo de 2009, 12:47 »
0
Sip, esa linea estaba mal. Aun asi, el problema continua

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Programa retorna al menu despues de intentar usarlo 2 veces
« Respuesta #3 en: Sábado 30 de Mayo de 2009, 12:50 »
0
Inicializa el valor de m...

Claudisimo

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Programa retorna al menu despues de intentar usarlo 2 veces
« Respuesta #4 en: Sábado 30 de Mayo de 2009, 21:18 »
0
Verdad, se me había pasado eso, sin embargo lo hice y sigue con el mismo problema

Claudisimo

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Programa retorna al menu despues de intentar usarlo 2 veces
« Respuesta #5 en: Domingo 31 de Mayo de 2009, 03:15 »
0
He descartado muchas cosas. Creo que el problema está en que la segunda vez que se abre un archivo comienza a leerlo desde el final. Hay alguna forma de indicar (tomando en cuenta que el archivo está abierto de la forma archivo.open(nombrearchivo)) que lea el archivo desde el principio??

Claudisimo

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Programa retorna al menu despues de intentar usarlo 2 veces
« Respuesta #6 en: Domingo 31 de Mayo de 2009, 04:15 »
0
Solucionado, declarando el ifstream dentro del ciclo arregló el problema. Efectivamente la variable archivo estaba provocando todo.

En todo caso me gustaría entender por que. Creo que despues comenzó a leer los archivos desde el final... pero nose. Aquí está el programa ya listo.

Código: C++
  1. #include<iostream>
  2. #include<string>
  3. #include<fstream>
  4. #include<string>
  5. #include<stdlib.h>
  6. #include<conio.h>
  7. #include<stdio.h>
  8. using namespace std;
  9.  
  10. char mayusculas(char letra);    //Transforma mayusculas en minusculas
  11. void dibujo(int oportunidades); //Muestra el dibujo del ahorcado
  12.  
  13. int main ()
  14. {
  15.     char nombrearchivo[50],a,palabra[30],palabragen[30],palabraaux[30],letra[1],salcont[1];
  16.     int n,i,q,w,e,u,k,t,m,x;
  17.     bool marcador;
  18.     m=1;
  19.     while(m!=0)
  20.     {
  21.         ifstream archivo;
  22.         salcont[0]='.';
  23.         marcador=0;
  24.         n=0;
  25.         k=0;
  26.         u=0;
  27.         q=0;
  28.         i=0;
  29.         n=0;
  30.         w=1;
  31.         x=0;
  32.         m=1;
  33.         cout<<"Bienvenido al ahorcado, porfavor indique su opcion"<<endl<<endl;
  34.         cout<<"1.-"<<'t'<<"Jugar al ahorcado (por defecto)"<<endl;
  35.         cout<<"0.-"<<'t'<<"Salir del programa"<<endl;
  36.         cin>>m;
  37.         system("cls");
  38.         switch(m)
  39.         {
  40.             case 1:
  41.             {
  42.                 cout<<"Ingrese el nombre del archivo a trabajar"<<endl;
  43.                 cin>>nombrearchivo;
  44.                 system("cls");
  45.                 archivo.open(nombrearchivo);
  46.                 while(salcont[0]!='-')
  47.                 {
  48.                     archivo.get(a);
  49.                     if (a>='A' && a<='Z')
  50.                         a=mayusculas(a);
  51.                     palabra[n]=a;
  52.                     if (palabra[n]==' ')
  53.                         palabra[n]='n';
  54.                     palabragen[i]=palabra[n];
  55.                     palabraaux[i]=palabra[n];
  56.                     if (palabra[n]=='n' || palabra[n]==' ')
  57.                     {
  58.                         if(i<3 || i>7)
  59.                         {
  60.                             cout<<"La palabra "";
  61.                            while(q<i)
  62.                            {
  63.                                cout<<palabraaux[q];
  64.                                q++;
  65.                            }
  66.                            cout<<"",ubicada en el archivo, esta fuera de rango"<<endl;
  67.                             system("pause");
  68.                             system("cls");
  69.                         }
  70.                     }
  71.                     if (palabra[n]=='n' && i>=3 && i<=7 || archivo.eof())
  72.                     {
  73.                         if (i==0)
  74.                         {
  75.                             salcont[0]='-';
  76.                             break;
  77.                         }
  78.                         for(q=0;q<i;q++)
  79.                             palabraaux[q]='-';
  80.                         for(q=i;q<=30;q++)
  81.                             palabraaux[q]=' ';
  82.                         cout<<"Ingresa una letra para adivinar la palabra y salvar al hombre de ser ahorcado. Guiate por la pista"<<endl<<endl;
  83.                         cout<<endl<<"La palabra tiene "<<i<<" letras."<<endl;
  84.                         if(i==0)
  85.                             salcont[0]='-';
  86.                         system("pause");
  87.                         while(u<=6)
  88.                         {
  89.                             system("cls");
  90.                             cout<<"Acertadas: "<<k<<" de "<<i<<endl;
  91.                             cout<<endl<<endl<<palabraaux<<endl;
  92.                             dibujo(u);
  93.                             q=0;
  94.                             letra[0]=getche();
  95.                             while(q<i)
  96.                             {
  97.                                 e=0;
  98.                                 t=0;
  99.                                 if(palabraaux[q]==letra[0])
  100.                                 {
  101.                                 while(t<=i)
  102.                                     {
  103.                                         while(e<=i)
  104.                                         {
  105.                                             if(palabraaux[e]==letra[0])
  106.                                             {
  107.                                                 cout<<endl<<"La letra "<<letra[0]<<" ya se encuentra ingresada"<<endl<<"Ingrese otra letra"<<endl;
  108.                                                 t=0;
  109.                                                 marcador=1;
  110.                                                 letra[0]=getche();
  111.                                             }
  112.                                             else
  113.                                                 t++;
  114.                                             e++;
  115.                                         }
  116.                                         e=0;
  117.                                     }
  118.                                 }
  119.                                 if (palabragen[q]==letra[0])
  120.                                 {
  121.                                     system("cls");
  122.                                     cout<<"Acertadas: "<<k<<" de "<<i<<endl;
  123.                                     palabraaux[q]=palabragen[q];
  124.                                     k++;
  125.                                     cout<<endl<<endl<<palabraaux<<endl;
  126.                                     dibujo(u);
  127.                                     marcador=1;                             //marcador indica si le acerto a la palabra, asi no perderá una oportunidad. Por defecto está en 0 a menos que acierte
  128.                                 }
  129.                                 else
  130.                                 {
  131.                                     system("cls");
  132.                                     cout<<endl<<endl<<palabraaux<<endl;
  133.                                     dibujo(u);
  134.                                 }
  135.                             q++;
  136.                             }
  137.                         if(marcador==0)
  138.                             u++;
  139.                         marcador=0;
  140.                         if(u>=6)
  141.                         {
  142.                             system("cls");
  143.                             cout<<"Acertadas: "<<k+1<<" de "<<i<<endl;
  144.                             cout<<endl<<endl<<palabraaux<<endl;
  145.                             dibujo(u);
  146.                             cout<<endl<<"Ha perdido, suerte a la proxima."<<endl;
  147.                             salcont[0]='-';
  148.                             system("pause");
  149.                             system("cls");
  150.                             break;
  151.                         }
  152.                         if(k==i)
  153.                         {
  154.                             cout<<endl<<"Felicidades, ha acertado la palabra. Para continuar jugando, ingrese cualquier tecla. Para volver al menu presione -"<<endl;
  155.                             cin>>salcont;                   //salcont saldrá del programa si el usuario presiona -
  156.                             if(salcont[0]=='-')
  157.                                 break;
  158.                             system("cls");
  159.                             u=7;
  160.                         }
  161.                         if(salcont[0]=='-')
  162.                             break;
  163.                         }
  164.                         i=-1;
  165.                             k=0;
  166.                         if(salcont[0]=='-')
  167.                             break;
  168.                     }
  169.                     else if (palabra[n]=='n')
  170.                         i=-1;
  171.                 if(salcont[0]=='-')
  172.                     break;
  173.                 i++;
  174.                 q=0;
  175.                 e=0;
  176.                 w=1;
  177.                 u=0;
  178.                 k=0;
  179.                 e=0;
  180.                 n=0;
  181.                 }
  182.                 archivo.close();
  183.                 break;
  184.             }
  185.             case 2 :
  186.                     break;
  187.             default: 1;
  188.         }
  189.     }
  190.     cout<<"Gracias por jugar ahorcado."<<endl;;
  191. }
  192.  
  193. char mayusculas (char letra)
  194. {
  195.     letra=letra+('a'-'A');
  196.     return letra;
  197. }
  198.  
  199. void dibujo(int oportunidades)
  200. {
  201.     if (oportunidades==0)
  202.     {
  203.         cout<<endl<<endl<<endl<<endl;
  204.         cout<<"                             #################"<<endl;
  205.         cout<<"                             #               #"<<endl;
  206.         cout<<"                             #               |"<<endl;
  207.         cout<<"                             #"<<endl;
  208.         cout<<"                             #"<<endl;
  209.         cout<<"                             #"<<endl;
  210.         cout<<"                             #"<<endl;
  211.         cout<<"                             #"<<endl;
  212.         cout<<"                             #"<<endl;
  213.         cout<<"                             #"<<endl;
  214.         cout<<"                             #"<<endl;
  215.         cout<<"                             #"<<endl;
  216.         cout<<"                             #"<<endl;
  217.         cout<<"                             #"<<endl;
  218.         cout<<"                             #"<<endl;
  219.         cout<<"                             #"<<endl;
  220.         cout<<"                             #"<<endl;
  221.         cout<<"                         #########"<<endl;
  222.     }
  223.     else if(oportunidades==1)
  224.     {
  225.         cout<<endl<<endl<<endl<<endl;
  226.         cout<<"                             #################"<<endl;
  227.         cout<<"                             #               #"<<endl;
  228.         cout<<"                             #               |"<<endl;
  229.         cout<<"                             #               *"<<endl;
  230.         cout<<"                             #             *^ ^* "<<endl;
  231.         cout<<"                             #             * - *"<<endl;
  232.         cout<<"                             #               *"<<endl;
  233.         cout<<"                             #"<<endl;
  234.         cout<<"                             #"<<endl;
  235.         cout<<"                             #"<<endl;
  236.         cout<<"                             #"<<endl;
  237.         cout<<"                             #"<<endl;
  238.         cout<<"                             #"<<endl;
  239.         cout<<"                             #"<<endl;
  240.         cout<<"                             #"<<endl;
  241.         cout<<"                             #"<<endl;
  242.         cout<<"                             #"<<endl;
  243.         cout<<"                         #########"<<endl;
  244.     }
  245.     else if(oportunidades==2)
  246.     {
  247.         cout<<endl<<endl<<endl<<endl;
  248.         cout<<"                             #################"<<endl;
  249.         cout<<"                             #               #"<<endl;
  250.         cout<<"                             #               |"<<endl;
  251.         cout<<"                             #               *"<<endl;
  252.         cout<<"                             #             *^ ^* "<<endl;
  253.         cout<<"                             #             * - *"<<endl;
  254.         cout<<"                             #               *"<<endl;
  255.         cout<<"                             #               *"<<endl;
  256.         cout<<"                             #               *"<<endl;
  257.         cout<<"                             #               *"<<endl;
  258.         cout<<"                             #               *"<<endl;
  259.         cout<<"                             #"<<endl;
  260.         cout<<"                             #"<<endl;
  261.         cout<<"                             #"<<endl;
  262.         cout<<"                             #"<<endl;
  263.         cout<<"                             #"<<endl;
  264.         cout<<"                             #"<<endl;
  265.         cout<<"                         #########"<<endl;
  266.     }
  267.     else if(oportunidades==3)
  268.     {
  269.         cout<<endl<<endl<<endl<<endl;
  270.         cout<<"                             #################"<<endl;
  271.         cout<<"                             #               #"<<endl;
  272.         cout<<"                             #               |"<<endl;
  273.         cout<<"                             #               *"<<endl;
  274.         cout<<"                             #             *^ ^* "<<endl;
  275.         cout<<"                             #             * - *"<<endl;
  276.         cout<<"                             #               *"<<endl;
  277.         cout<<"                             #              **"<<endl;
  278.         cout<<"                             #             * *"<<endl;
  279.         cout<<"                             #            *  *"<<endl;
  280.         cout<<"                             #               *"<<endl;
  281.         cout<<"                             #"<<endl;
  282.         cout<<"                             #"<<endl;
  283.         cout<<"                             #"<<endl;
  284.         cout<<"                             #"<<endl;
  285.         cout<<"                             #"<<endl;
  286.         cout<<"                             #"<<endl;
  287.         cout<<"                         #########"<<endl;
  288.     }
  289.     else if(oportunidades==4)
  290.     {
  291.         cout<<endl<<endl<<endl<<endl;
  292.         cout<<"                             #################"<<endl;
  293.         cout<<"                             #               #"<<endl;
  294.         cout<<"                             #               |"<<endl;
  295.         cout<<"                             #               *"<<endl;
  296.         cout<<"                             #             *^ ^* "<<endl;
  297.         cout<<"                             #             * - *"<<endl;
  298.         cout<<"                             #               *"<<endl;
  299.         cout<<"                             #              ***"<<endl;
  300.         cout<<"                             #             * * *"<<endl;
  301.         cout<<"                             #            *  *  *"<<endl;
  302.         cout<<"                             #               *"<<endl;
  303.         cout<<"                             #"<<endl;
  304.         cout<<"                             #"<<endl;
  305.         cout<<"                             #"<<endl;
  306.         cout<<"                             #"<<endl;
  307.         cout<<"                             #"<<endl;
  308.         cout<<"                             #"<<endl;
  309.         cout<<"                         #########"<<endl;
  310.     }
  311.     else if(oportunidades==5)
  312.     {
  313.         cout<<endl<<endl<<endl<<endl;
  314.         cout<<"                             #################"<<endl;
  315.         cout<<"                             #               #"<<endl;
  316.         cout<<"                             #               |"<<endl;
  317.         cout<<"                             #               *"<<endl;
  318.         cout<<"                             #             *^ ^* "<<endl;
  319.         cout<<"                             #             * - *"<<endl;
  320.         cout<<"                             #               *"<<endl;
  321.         cout<<"                             #              ***"<<endl;
  322.         cout<<"                             #             * * *"<<endl;
  323.         cout<<"                             #            *  *  *"<<endl;
  324.         cout<<"                             #               *"<<endl;
  325.         cout<<"                             #              *"<<endl;
  326.         cout<<"                             #             *"<<endl;
  327.         cout<<"                             #            *"<<endl;
  328.         cout<<"                             #"<<endl;
  329.         cout<<"                             #"<<endl;
  330.         cout<<"                             #"<<endl;
  331.         cout<<"                         #########"<<endl;
  332.     }
  333.     else if(oportunidades==6)
  334.     {
  335.         cout<<endl<<endl<<endl<<endl;
  336.         cout<<"                             #################"<<endl;
  337.         cout<<"                             #               #"<<endl;
  338.         cout<<"                             #               |"<<endl;
  339.         cout<<"                             #               *"<<endl;
  340.         cout<<"                             #             *x x* "<<endl;
  341.         cout<<"                             #             * O *"<<endl;
  342.         cout<<"                             #               *"<<endl;
  343.         cout<<"                             #              ***"<<endl;
  344.         cout<<"                             #             * * *"<<endl;
  345.         cout<<"                             #            *  *  *"<<endl;
  346.         cout<<"                             #               *"<<endl;
  347.         cout<<"                             #              * *"<<endl;
  348.         cout<<"                             #             *   *"<<endl;
  349.         cout<<"                             #            *     *"<<endl;
  350.         cout<<"                             #"<<endl;
  351.         cout<<"                             #"<<endl;
  352.         cout<<"                             #"<<endl;
  353.         cout<<"                         #########"<<endl;
  354.     }
  355. }
  356.  
  357.  

Gracias a todos