El ahorcado en C

Bueno como vereis nos han mandado hacer el juego del ahorcado en C, la verdad es que estamos empezando con todo esto de programacion (llevaremos algo asi como casi dos meses) y estoy teniendo bastantes problemas, pues al introducir la supuesta palabra a adivinar, me muestra tanto su primer caracter como el ultimo. Os dejo esta parte del codigo y espero que podais decirme donde esta el fallo.

#include
#include
#include

void imprime(int largo_f);

char palabrasecreta[30];

main (void)
{

char largo='\0'; //inicializando variable

for(int i=0;i<20;i++) //limpiando la cadena vacia
palabrasecreta[i]='\0';


printf(" Introduce la palabra secreta ---> ");
gets(palabrasecreta);



largo=strlen(palabrasecreta); /* canculo la longitud palabra */

imprime(largo); /* imprimo "-" para cada letra que intrega el largo de la palabra*/
getch();



}

/* imprime los guiones en vez de caracteres*/
void imprime(int largo_f)
{
int i=0; //inicializando variable

printf("%c",palabrasecreta[0]); //imprimimos el primer caracter de la cadena

for(i=1;iprintf(" _ ");
}

printf("%c",palabrasecreta[largo_f-1]); //imprimimos el ultimo caracter de la palabra

return;
}
Lo que yo e podido apreciar del programa a simple vista.

El strlen te devuelve un entero a si que declara int largo.

Luego has puesto for(i=0;i<20;i++) y seria for(i=0;i<=29;i++) ya que has declarado la variable palabrasecreta de 30 caracteres.

Dices: estoy teniendo bastantes problemas, pues al introducir la supuesta palabra a adivinar, me muestra tanto su primer caracter como el ultimo . Y que quieres hacer, que salgan todo guiones? Pero si tu mismo has puesto en la funcion :mprimimos el primer caracter de la cadena y imprimimos el ultimo caracter de la palabra .

Si quieres q todo te salga guiones haz
for(i=0;i<=argo_f-1:i++)
printf("_");

Espero haberte podido ayuda.

Un saludo
Luego has puesto for(i=0;i<20;i++) y seria for(i=0;i<=29;i++) ya que has declarado la variable palabrasecreta de 30 caracteres.


Upss es verdad ahi tienes razon, pero me temo que a pesar de los otros cambios que me comentas sigue mostrandome tanto el ultimo como el primer caracter.

Vamos que si introduzco hola, pues me sale h _ _ a.

Y no doy con el fallo [decaio]
Por lo que yo veo para que te salga hasta el final de la palabra guiones debes de poner que el bucle termine en el final de la cadena, es decir, en (i<=largo_f). Tu has puesto que te escriba guiones hasta (largo_f-1), es decir, hasta la penultima letra de la cadena...entonces la ultima letra te la escribe tal cual. Creo que es eso, si te sirve de algo...
VAle quieres que no salga ninguna letra, muy facil:

#include
#include
#include

void imprime(int largo_f);

char palabrasecreta[30];

main (void)
{

int largo,i;

for(i=0;i<30;i++) //limpiando la cadena vacia
palabrasecreta[i]='\0';


printf(" Introduce la palabra secreta ---> ");
gets(palabrasecreta);



largo=strlen(palabrasecreta); /* canculo la longitud palabra */

imprime(largo); /* imprimo "-" para cada letra que intrega el largo de la palabra*/
getch();



}

/* imprime los guiones en vez de caracteres*/
void imprime(int largo_f)
{
int i; //inicializando variable

for(i=0;i<=largo_f;i++)
printf(" _ ");

}

Quedaria asi. Lo que no entiendo es que si quieres que te salgan en toda la palabra rayas bajas porque pones esto :"printf("%c",palabrasecreta[0]); //imprimimos el primer caracter de la cadena" y esto: "printf("%c",palabrasecreta[largo_f-1]); //imprimimos el ultimo caracter de la palabra".

Saludos
Waa, eso era, ya he visto donde estaba el fallo.
Muchas gracias [tadoramo] aunque ahora me queda la parte para mi mas complicada y es averiguar como hacer para que al introducir un caracter cualquiera, este me diga si coincide o no con alguno de la palabra introducida, asi que lo mas seguro os siga pidiendo ayuda [ayay]
------------------------------------------------------------------------------------

Pues tal como os decia ahora tengo que averiguar como hacer para que al introducir un caracter cualquiera, este me diga si coincide o no con alguno de la palabra introducida, pero me temo que no tengo la mas minima idea de como continuar, apartir de donde lo deje, asi que espero que me podais ayudar.

Saludos
5 respuestas