Salve a tutti, sto scrivendo il gioco dell'impiccato e ho riscontrato due bug nel programma che non riesco a risolvere. In sostanza, quando vado ad inserire la parola da indovinare dovrebbe accettarmi solo parole con lettere minuscole e nessun altro carattere, ma il controllo che ho fatto per questo scopo non sembra funzionare bene. Inoltre avevo implementato un controllo per scalare il monte errori solo nel caso in cui la lettera scelta fosse stata sbagliata ma anche questo non accade. Sarei molto felice se mi poteste aiutare a risolvere questo problema! Grazie in anticipo!
Vi posto il codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 30
#define ASCII 32 //costante di conversione
int main(){
char parola_indovinare[MAX], parola[MAX], lettera;
int indice_tentativi, tentativi, grandezza_parola, x, y, controllo=0, i=0;
printf("**************Gioco dell'impiccato!****************"); //presentazione gioco
int z=0;
do{ // controllo lunghezza della parola e se sono tutte maiuscole
printf("\n\nInserisci la parola da indovinare da 1 a 30 lettere minuscole: ");
fflush(stdin);
scanf("%s",parola_indovinare);
for(y=0;y<strlen(parola_indovinare);y++){
if((parola_indovinare[y]<97) || (parola_indovinare[y]>122))
z=1;
}
}while((strlen(parola_indovinare)>MAX) || (strlen(parola_indovinare)<=0) || z==1);
system("cls");
printf("\n\nIl tentativo viene scalato solo quando si sbaglia.");
printf("\nI tratti sono le vocali, i puntini le consonanti.");
printf("\n\nIndovina la parola: ");
tentativi=10;
grandezza_parola=strlen(parola_indovinare); //misura grandezza parola
for(y=0;y<grandezza_parola;y++){ //ciclo assegnazione tratti e punti
if((parola_indovinare[y]==97) || (parola_indovinare[y]==101) || (parola_indovinare[y]==105) || (parola_indovinare[y]==111) || parola_indovinare[y]==117)
parola[y]='_';
else
parola[y]='.';
printf("%c",parola[y]);
printf(" ");
}
for(indice_tentativi=0;indice_tentativi<tentativi;){
printf("\nHai %d tentativi.",i);
printf("\nInserisci la lettera: ");
fflush(stdin);
scanf("%c",&lettera); //inserimento lettera
if((lettera>=65) && (lettera<=90)){ //conversione maiuscole in minuscole tramite codice ASCII
lettera=lettera+ASCII;
}
for(x=0;x<grandezza_parola;x++){
if(lettera==parola_indovinare[x]){ //ciclo assegnazione lettera a vettore parola
parola[x]=lettera;
controllo=1;
}
else
controllo=0;
}
if(controllo==1){
for(x=0;x<grandezza_parola;x++){
printf("%c",parola[x]);
printf(" ");
}
}
else{
indice_tentativi++;
i--;
for(x=0;x<grandezza_parola;x++)
printf("%c ",parola[x]);
}
}
printf("\nGioco finito!"); //fine gioco
system("\nPause");
return 0;
}