Semplice programma C non da l'esito sperato

di il
10 risposte

Semplice programma C non da l'esito sperato

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

  • Re: Semplice programma C non da l'esito sperato

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

    Ma mi sembra un comportamento corretto

  • Re: Semplice programma C non da l'esito sperato

    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’?

  • Re: Semplice programma C non da l'esito sperato

    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?  

  • Re: Semplice programma C non da l'esito sperato

    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?

  • Re: Semplice programma C non da l'esito sperato

    Tu sai come si interrompe un ciclo?

  • Re: Semplice programma C non da l'esito sperato

    14/11/2024 - oregon ha scritto:


    Tu sai come si interrompe un ciclo?

    Con l'istruzione break tipo lo switch?

  • Re: Semplice programma C non da l'esito sperato

    Sì… subito dopo

    c_lettere = c_lettere+1;
  • Re: Semplice programma C non da l'esito sperato

    14/11/2024 - oregon ha scritto:


    Sì… subito dopo

    c_lettere = c_lettere+1;

    Funziona!!!Grazie mille per il tuo aiuto!!

  • Re: Semplice programma C non da l'esito sperato

    Bene, ma spero tu abbia capito il perchè funziona

  • Re: Semplice programma C non da l'esito sperato

    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