Semplice programma C non da l'esito sperato

di Andre12 il
10 risposte

Buonasera ragazzi, mi sto avvicinando alla programmazione adesso perciò sto iniziando dalle basi e stavo provando a fare un programma in cui data una parola l'utente dovrà indovinare, in 10 turni, il massimo numero di lettere e in base a quante lettere l'utente avrà indovinato il programma stamperà poi un messaggio diverso. Credo di aver fatto tutto bene però nel conto finale delle lettere indovinate non mi trovo…forse perchè mi conta quelle ripetute due volte?

Vi posto il codice:

#include <stdio.h>

int main(void){

	//Dichiarazione variabile
	char parola[]={'b','e','n','v','e','n','u','t','o'};//Parola segreta
	char lettera;//Lettera da inserire
	int c_lettere=0;//contatore lettere trovate
	int inserim=0;//turni

	printf("BENVENUTO IN QUESTO SEMPLICE GIOCO:\n");
	printf("PROVA AD INDOVINARE LE LETTERE CHE COMPONGONO LA PAROLA!!\n");
	printf("INIZIAMO!\n");

	do{
	printf("Inserisci una lettera e vediamo se si trova nella parola:");
	fflush(stdout);
	scanf(" %c",&lettera);//Input lettera
	inserim=inserim+1;

	for(int i=0;i<9;i++){
		if(parola[i] == lettera){
		  c_lettere = c_lettere+1;
		}
	}
    }
	while(inserim<10);


        if(c_lettere>7){
        	printf("Sei fortissimo!!\n");
        	printf("Hai indovinato %d parole",c_lettere);
        }
	    else
	       if(c_lettere==7){
			printf("Hai vinto!!");
			printf("Hai indovinato %d parole",c_lettere);
		}
		else
		   if(c_lettere>4 && c_lettere<7){
			printf("Congratulazioni!!!");
			printf("Hai indovinato %d parole",c_lettere);
		}
		else
			if(c_lettere>=1 && c_lettere<4){
			  printf("Andrà meglio la prossima volta!");
			  printf("Hai indovinato %d parole",c_lettere);
		}
		else
			if(c_lettere==0){
					printf("Ritenta!Sarai più fortunato!");
					printf("Hai indovinato %d parole",c_lettere);
			}
		return 0;
}

10 Risposte

  • Ovviamente il ciclo conterà le lettere quindi, ad esempio la e, sarà contata 2 volte

    Ma mi sembra un comportamento corretto

  • 13/11/2024 - oregon ha scritto:


    Ovviamente il ciclo conterà le lettere quindi, ad esempio la e, sarà contata 2 volte

    Ma mi sembra un comportamento corretto

    Però se io lo eseguo e provo questo:

    BENVENUTO IN QUESTO SEMPLICE GIOCO:
    PROVA AD INDOVINARE LE LETTERE CHE COMPONGONO LA PAROLA!!
    INIZIAMO!
    Inserisci una lettera e vediamo se si trova nella parola:b
    Inserisci una lettera e vediamo se si trova nella parola:e
    Inserisci una lettera e vediamo se si trova nella parola:m
    Inserisci una lettera e vediamo se si trova nella parola:p
    Inserisci una lettera e vediamo se si trova nella parola:q
    Inserisci una lettera e vediamo se si trova nella parola:a
    Inserisci una lettera e vediamo se si trova nella parola:s
    Inserisci una lettera e vediamo se si trova nella parola:d
    Inserisci una lettera e vediamo se si trova nella parola:t
    Inserisci una lettera e vediamo se si trova nella parola:o
    Congratulazioni!!!Hai indovinato 5 parole

    non dovrebbe darmi come risultato 4 lettere(b,e,t,o)che sono effettivamente presenti nella parola ‘Benvenuto’?

  • Intanto la frase finale è sbagliata perchè indovini le lettere non le parole.

     Quindi

    Hai indovinato 5 lettere

    Poi dipende dalle regole del gioco che vuoi fare. In effetti sono 5 lettere della parola anche se una lettera è ripetuta. Se non vuoi contare le ripetizioni il codice deve essere cambiato leggermente interrompendo la for se il carattere viene trovato.Sai come si fa?  

  • 13/11/2024 - oregon ha scritto:


    Intanto la frase finale è sbagliata perchè indovini le lettere non le parole.

     Quindi

    Hai indovinato 5 lettere

    Poi dipende dalle regole del gioco che vuoi fare. In effetti sono 5 lettere della parola anche se una lettera è ripetuta. Se non vuoi contare le ripetizioni il codice deve essere cambiato leggermente interrompendo la for se il carattere viene trovato.Sai come si fa?  

    Ho rivisto il codice e il suo funzionamento di per se è corretto,però io voglio che le lettere ripetute vengano contate una sola volta(quindi la e dovrebbe valere 1 pt e non 2 come giustamente accade qui),mi daresti qualche dritta per interrompere il for se il carattere viene trovato?

  • Tu sai come si interrompe un ciclo?

  • Sì… subito dopo

    c_lettere = c_lettere+1;
  • Bene, ma spero tu abbia capito il perchè funziona

  • 15/11/2024 - oregon ha scritto:

    Bene, ma spero tu abbia capito il perchè funziona

    Ciao scusa il ritardo! Praticamente inizia il ciclo, scorre il vettore e nel momento in cui viene trovata la prima lettera uguale a quella cercata esegue l'istruzione 

    c_lettere = c_lettere+1;

    e poi viene eseguita l'esecuzione break che causa un passaggio all'istruzione successiva che è quella in cui viene verificata la condizione del do-while. In questo modo se per esempio la lettera cercata nella posizione 2 del vettore, a causa di break il ciclo non scorre tutto il vettore fino alla fine contando quindi una volta  una lettera presente due o più volte

Devi accedere o registrarti per scrivere nel forum
10 risposte