Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con un codigo que no me va.

Estas en el tema de Problema con un codigo que no me va. en el foro de C/C++ en Foros del Web. Bueno gente, buenas a todos. Estoy armando un ahorcado para entregar mañana en clases y estube toda la tarde dandole vueltas a un error que ...
  #1 (permalink)  
Antiguo 19/01/2009, 15:44
Avatar de axdds34  
Fecha de Ingreso: diciembre-2005
Ubicación: Tei Chua - China
Mensajes: 214
Antigüedad: 18 años, 4 meses
Puntos: 4
Problema con un codigo que no me va.

Bueno gente, buenas a todos. Estoy armando un ahorcado para entregar mañana en clases y estube toda la tarde dandole vueltas a un error que tengo con respecto a menu y a un switch y no logro ver donde esta. Mi pedido es que si algun alma caritativa me puede mirar un poco el codigo y decirme si hay algo mal.

Código:
#include<stdio.h>
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<ctype.h>

int premio (int a);
int menu(void);

int main() {
   char palabra[15],rep[100],temporal[100]; 
   char pal;
   int longitud=0,i,j=0,inicio=0,acertado=0,temp=0,oportunidad=8, min;
   int repetido=0,gano=0, opcion;
   do
   {
   opcion = menu();  //llamada a la funcion menu 

       switch(opcion){
		case 1:
            printf("Palabra que tiene que adivinar: ");
            gets(palabra);
            system("cls");
            rep[0] = ' ';
            rep[1] = '\0';
            do {
            	system("cls");
                temp=0;
                    for(i=0;palabra[i]!='\0';i++)
                {
                    if((islower(palabra[i]))==0)
                    {
                    min++;
                    }
                }                
                
                if(inicio == 0) {
                  for(i=0;i<strlen(palabra);i++) {
                  if(palabra[i] == ' ') {
                  temporal[i] = ' ';
                  longitud++;
                }
                    else {
                    temporal[i] = '_';	
                    longitud++;
                }
                }
                }
                    inicio = 1;
                    temporal[longitud] = '\0';
                    for(i=0;i<strlen(rep);i++) {
                    if(rep[i] == pal) {
                    repetido = 1;
                   
                } 
                    else {
                    repetido = 0;
                }
                }

                    if(repetido == 0) {
                    for(i=0;i<strlen(palabra);i++) {
	                if(palabra[i] == pal) {
	                temporal[i] = pal;
	                acertado++;
	                temp=1;
                 	} 
                    }
                    }
                    if(repetido == 0) {
                    if(temp == 0) {
                    oportunidad = oportunidad - 1;
                    }
                    }
                    else {
                    printf("Esta letra esta repetida.");
                    printf("\n\n");
                    }
                    printf("\n");
                    for(i=0;i<strlen(temporal);i++) {
                    printf(" %c ",temporal[i]);
                    }
                    printf("\n");
                    if(strcmp(palabra,temporal) == 0) {
                	gano = 1;
	                
                    }
                    printf("\n");
                    printf("Aciertos: %d",acertado);
                    printf("\n");
                    printf("Te quedan %d oportunidades.",oportunidad);
                    printf("\n");
                    rep[j] = pal;
                    j++;
                    printf("Letra que este en la palabra::");
                    scanf("\n%c",&pal); 
                    }
                while(oportunidad != 0);
                premio(gano);
                break;
        case 2:
             printf("\n\nGracias por jugar. \n\n\n");
             system("pause");
             system("cls");
             }
        system("cls");
       }
       while(opcion==1);
       
       }


int premio (int a)
{
if(a==1) {
	printf("\n\n");
 printf("Felicitaciones, esa era la palabra\n");
 system("pause");
}
else {
	printf("\n\n");
 printf("Perdiste, otra ves sera...\n");
 system("pause");
}
printf("\n\n");
}

int menu(void)
{      int opcion;
       printf("\t | Juego del Ahorcado |\n\t\n\t1. Jugar\n\n\t2. Salir\n\n\t Elegir la opci¢n: ");
     scanf("%d",&opcion);
     return(opcion);
}
Lo que no me deja poner es la palabra a adiviar, una ves que tengo el menu, ingreso al switch pero no me respeta la peticion de la palabra.
  #2 (permalink)  
Antiguo 19/01/2009, 16:50
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: Problema con un codigo que no me va.

quizas se deba al buffer...prueba limpiandolo con un fflush(stdin); justo antes de ir a recoger una cadena de characteres...o un caracter...

espero que te sirva
  #3 (permalink)  
Antiguo 19/01/2009, 16:58
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Respuesta: Problema con un codigo que no me va.

En vez de usar la función gets (cuyo uso está muy desaconsejado por cuestiones de seguridad), usá la función scanf de la siguiente manera:

Código:
scanf("%s",palabra);
Lo probé y anduvo

Por otro lado, la librería conio.h es una librería inventada por Borland y no es estándar, por lo que no es bueno que la uses.
  #4 (permalink)  
Antiguo 20/01/2009, 03:10
Avatar de axdds34  
Fecha de Ingreso: diciembre-2005
Ubicación: Tei Chua - China
Mensajes: 214
Antigüedad: 18 años, 4 meses
Puntos: 4
Respuesta: Problema con un codigo que no me va.

Le puse un fflush y me va perfecto ahora, era el baffer de entrada.
Por ahora va bien, pero no me dice si ganaste o no.
  #5 (permalink)  
Antiguo 24/01/2009, 20:26
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Respuesta: Problema con un codigo que no me va.

Cita:
Iniciado por calathea Ver Mensaje
quizas se deba al buffer...prueba limpiandolo con un fflush(stdin); justo antes de ir a recoger una cadena de characteres...o un caracter...

espero que te sirva
Que raro
Fue una de las primeras cosas que probé, y seguía teniendo el mismo error. Me funcionó bien con el scanf.

En fin, cosas que pasan.
  #6 (permalink)  
Antiguo 25/01/2009, 04:36
Avatar de define  
Fecha de Ingreso: enero-2008
Mensajes: 100
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Problema con un codigo que no me va.

si te funcionaba bien con el scanf y con el gets no, es debido a que no limpiabas el buffer cuando tocas, al usar gets, el buffer tiene que ser limpiado antes de usar este.
  #7 (permalink)  
Antiguo 25/01/2009, 09:12
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Respuesta: Problema con un codigo que no me va.

Lo primero que probé, fue limpiar el buffer con la función fflush, antes de llamar a gets, pero seguía haciendo lo mismo, pasaba de largo el gets.

Sólo me funcionaba bien con scanf.
  #8 (permalink)  
Antiguo 26/01/2009, 06:47
Avatar de define  
Fecha de Ingreso: enero-2008
Mensajes: 100
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Problema con un codigo que no me va.

que buffer le pasbas a fflush?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:02.