Sto provando a fare questo esercizio:
es: Si scriva in C++ un programma completo opportunamente modularizzato in funzioni che simuli una variante del gioco dell’impiccato tra due giocatori. Le regole del gioco sono le seguenti: il primo giocatore sceglie una parola segreta e mostra all’altro una serie di trattini (lunga quanto la lunghezza della parola da indovinare), ognuno dei quali nasconde una lettera. Il secondo giocatore ha a disposizione sette tentativi, in cui può dire qual è secondo lui la parola segreta oppure dichiarare una lettera; se la lettera dichiarata è presente nella parola segreta, il primo giocatore scopre tutti i trattini che nascondono la lettera indovinata. Il gioco termina quando il secondo giocatore indovina la parola segreta (e quindi vince) oppure esaurisce i tentativi a disposizione (e quindi vince il primo giocatore).
Esempio di partita: Il giocatore 1 sceglie come parola segreta portobello e mostra quindi la serie di trattini: _ _ _ _ _ _ _ _ _ _.
1° tentativo il giocatore 2 sceglie di dichiarare la lettera o ed il giocatore 1 mostra: _o_ _o_ _ _ _o.
2° tentativo il giocatore 2 sceglie di dichiarare la lettera s ed il giocatore 1 mostra: _o_ _o_ _ _ _o.
3° tentativo il giocatore 2 sceglie di dichiarare la lettera l ed il giocatore 1 mostra _o_ _o_ _ l l o.
4° tentativo il giocatore 2 sceglie di provare ad indovinare direttamente la parola e dice portogallo. Il giocatore 1 comunica che la risposta è sbagliata.
5° tentativo il giocatore 2 sceglie di nuovo di provare ad indovinare la parola e dice portobello. Il giocatore 1 comunica che la risposta è esatta ed il gioco termina

Una domanda è: ho modularizzato correttamente il programma in funzioni? ho fatto bene a usare funzioni void?
Il programma compila cosi' com'è.. e in esecuzione il problema è:
1)quando il giocatore 2 (gioc2) decide di provare ad indovinare una lettera..e dice quella giusta appare la lettera nella posizione corretta...e fin qui tutto ok.. poi se sceglie di nuovo di indovina un'altra lettera e questa è corretta...il programma stampa solo questa nuova lettera nella posizione giusta e invece dovrebbe stampare la nuova lettera e anche le lettere precedentemente indovinate(capito?!)..
2)quando il giocatore 2 prova a indovinare l'intera parola... anche se non indovina tutta la parola ma indovina qualche lettera l'output del programma è formato da varie frasi(me ne dà 5 ogni volta)...alcune dicono hai sbagliato e altre risposta corretta... mentre dovrebbe dire risposta corretta soltanto se tutte le lettere della parola sono state indovinate. Quindi una sola frase dovrebbe stampare e non una frase per ciclo..

ecco il codice:
codice:
#include <iostream>
using namespace std;

void indovina(char parola [], int dim, char risposta_l, char risposta_p []);
void scegli(char parola [], int dim);

int main(){
    char parola [20];
    char risposta_l; 
    char risposta_p [20];
   
   scegli(parola, 20);
   indovina(parola, 20, risposta_l, risposta_p);
   
   
    
 system("pause");
 return 0;
    
}

void indovina(char parola [], int dim, char risposta_l, char risposta_p []){
                   int tentativi=0, scelta=0;
        while(tentativi<=7){
                            cout<<"indovini una lettera?(1) o la parola?(2)"<<endl; cin>>scelta;
                            switch(scelta){
                                           case 1: cout<<"scrivi la lettera... "<<endl; cin>>risposta_l;
                                                   for(int i=0; parola [i]!= '\0'; i++){
                                                   if(risposta_l == parola [i])
                                                   cout<<risposta_l;
                                                   if(risposta_l != parola [i])
                                                   cout<<"_ ";
                                                   }//for
                                                   break;
                                            case 2: cout<<"scrivi la parola... "<<endl; cin>>risposta_p;
                                                    for(int i=0; parola [i] != '\0';i++){
                                                            if(risposta_p [i] != parola [i])                                                           
                                                            cout<<"SBAGLIATO!, ritenta"<<endl;
                                                            else
                                                            cout<<"RISPOSTA ESATTA!!!"<<endl;
                                                   }//for
                                                   break;                       
                            }//switch
                ++tentativi;            
        }//while
    
}


void scegli(char parola [], int dim){
      cout<<"gioc1-inserire parola"<<endl;
    cin>>parola;
    system("cls");
    for(int i=0; parola [i]!='\0'; i++)
            cout<<"_ ";
            cout<<endl;
            cout<<"gioc2 - indovina la parola o una lettera!... "<<endl;
     
     
     }