Autor Tema: Programa en el que el usuario adivine una palabra secreta en C ++  (Leído 49 veces)

Luz Sánchez

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Hola! tengo unos problemas en la parte final del programa porque se imprimen los mensajes del final if y del while juntos ademas, en que me equivoque o que me hace falta?

El enunciado es el siguiente:
Realizar un programa que permita al usuario adivinar una palabra secreta, solicitando 10
letras máximo para adivinar la palabra. Mostrar la ubicación de las letras en la palabra
cada vez que la letra sea parte de la palabra.

#include<stdio.h>
#include<string.h>

main(){
   char palabra[10]="escuela"; //declaramos variables
   char letras[10];
   char respuesta[10]={};
   char letra, opcion;
   char letra2="s";
   int i=0, intentos=10, contador=0;
   
   
   for( i=0; i<strlen(palabra); i++){
      letras='_';
   }
    do {
       fflush(stdin);
       printf("\nInserta una letra: ");
       scanf("%c",&letra);
       
       for( i=0; i<strlen(palabra); i++){
          if(letra==palabra){
             letras=letra;
         }
      }
      
      for(i=0; i<strlen(letras); i++){
         printf("%c", letras);
         
      }
      printf("\n¿Ya sabes la respuesta?: s/n: ");
      scanf("%c",&opcion);
      contador++;
      
      if (opcion==letra2){
         printf("\nEscribe la respuesta aqui: ");
         scanf("%s",&respuesta[10]);
         palabra[10]=respuesta[10];
         
         printf("\nADIVINASTE");
      } break;
      
      
   
   } while(intentos==10);
      printf("\nLa palabra secreta es: escuela");
      printf("\n\n¡SUERTE PARA LA PROXIMA!");




}

Kabuto

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 364
    • Ver Perfil
Re:Programa en el que el usuario adivine una palabra secreta en C ++
« Respuesta #1 : 28 de Junio 2020, 14:12 »
Los mensaje que hay después del while, se van a mostrar SIEMPRE, a no ser que les pongas alguna condición.
Pero antes de arreglar esto, quiero comentar otra cosa.

Tu condición del while es que (intentos == 10).
Pero, la variable intentos, no está siendo modificada nunca dentro del bucle, siempre tiene valor 10. Así que este bucle se va a repetir infinitamente.

Tú lo detienes por la sentencia break cuando el usuario dice que quiere adivinar, pero si no, el usuario tendría intentos infinitos.
Por cierto, ese break parece que se ejecuta SIEMPRE, debería ejecutase solo cuando el usuario dice que quiere adivinar, y además realmente la adivina.

Luego usas una variable llamada contador que va aumentando, pero luego no haces nada con ella.
Supongo que la intención es contar intentos y luego comparar su valor con la variable intentos, a ver si ya ha cumplido los 10. Esto debería ser en todo caso la condición del while, la comparación de estas dos variables, pero en realidad no necesitas a contador y lo podrías resolver solo con la variable intentos, haciendo que decremente en cada repetición del bucle hasta llegar a 0, que será lo que ponga fin al bucle.

Cuando se pide adivinar y el usuario da una respuesta, hay que comparar los arrays de char a ver si coinciden o no.
Me suena de que existe una función llamada memcmp() para comparar arrays.
Si no, siempre puedes escribir tu propia función para hacer la comparación.

Yo soy más de Java, no toco apenas el lenguaje C (en el título del post dices C++, pero esto me parece C "a secas") así que lo que voy a escribir lo hago sin estar seguro de si funciona o no.

Pero al menos servirá para dar una idea de cuál sería la lógica a aplicar.
Añado líneas de comentarios donde hago los principales cambios.

Código: [Seleccionar]
main(){
   char palabra[10]="escuela"; //declaramos variables
   char letras[10];
   char respuesta[10]={};
   char letra, opcion;
   char letra2="s";
   int i=0, intentos=10;
   
   
   for( i=0; i<strlen(palabra); i++){
      letras[i]='_';
   }
    do {
       fflush(stdin);
       printf("\nInserta una letra: ");
       scanf("%c",&letra);
       
       for( i=0; i<strlen(palabra); i++){
          if(letra==palabra[i]){
             letras[i]=letra;
         }
      }
     
      for(i=0; i<strlen(letras); i++){
         printf("%c", letras);
         
      }
      printf("\n¿Ya sabes la respuesta?: s/n: ");
      scanf("%c",&opcion);
      intentos--; //Descontamos un intento
     
      if (opcion==letra2){
         printf("\nEscribe la respuesta aqui: ");
         scanf("%s",&respuesta[10]);
         if (memcmp(palabra, respuesta, 10) == 0) {
                  printf("\nADIVINASTE");
                  break; //Solo rompemos bucle si se ha acertado
         }
      }
     
   } while(intentos > 0); //Bucle termina cuando intentos se reduce a 0

      //Si los intentos han alzando valor 0, es que el usuario no ha acertado palabra
      if (intentos == 0) {         
            printf("\nLa palabra secreta es: escuela");
            printf("\n\n¡SUERTE PARA LA PROXIMA!");
      }

}
« última modificación: 28 de Junio 2020, 14:24 de Kabuto »
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Esto es un laboratorio de ideas...
Aprender a programar

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".