Programma che non si chiude

di il
5 risposte

Programma che non si chiude

Salve a tutti, scopiazzando un po' da internet ed aggiustando un po' il codice sono riuscito a far partire tranquillamente questo programma, il problema è che non si chiude quando premo invio dopo aver indovinato la parola, invece se sbaglio funziona tutto bene. Potete aiutarmi? Si tratta del gioco dell'impiccato.

Edit: ho dimenticato di scrivere che è un programma in C++ (per voi sarà ovvio, ma per quelli come me non lo è!) e che lo compilo con Visual C++ 2010 express della Microsoft.
#include <iostream>
using namespace std;

char input[1000];
int size=-1;
char lettura;
bool indovinati[1000]={0};
int tentativi=6;

bool presente(char input[], char lettura, int size, bool ind[]);

int main()
{
	cout<<"Inserisci la parola seguita dal carattere '*'"<<endl;
	cin>>lettura;

	while(lettura != '*')
	{	
		size++;
		input[size]=lettura;
		cin>>lettura;
	}
	if(size==-1)
		return 0;

	for(int i=0; i<=size; i++)
		cout<<" - ";
		
	cout<<endl;
	cout<<"Inserisci una lettera"<<endl;
	cin>>lettura;
	while(tentativi != 0)
	{
		if(presente(input,lettura,size,indovinati))
		{
			for(int i=0; i<=size; i++)
			{
				if(indovinati[i])
					cout<<input[i]<<" ";
				else
					cout<<" - ";
			}
			cout<<endl;

		}
		else
		{
			tentativi--;
			cout<<"Lettera non presente nella parola! Tentativi rimamenti= "<<tentativi<<endl<< "\n";
		}
		bool b=true;
		for(int i=0; i<=size; i++)
		{
			if(!indovinati[i])
			{
				i=size+1;
				b=false;
			}
		}
		if(b)
		{
			
		}
		cin>>lettura;
		cout<<"Hai indovinato la parola!"<<endl<< "\n";
			system ("pause");
	}
	cout<<"Hai perso!"<<endl<< "\n";
	system ("pause");
	
}

bool presente(char input[], char lettura, int size, bool ind[])
{

	bool done=false;
	for(int i=0; i<=size; i++)
		if(input[i]==lettura)
		{
			ind[i]=true;
			done=true;
		}
	return done;
	}

5 Risposte

  • Re: Programma che non si chiude

    Nessuno riesce ad aiutarmi? Non dovrebbe essere difficile, l'errore dovrebbe essere nel system pause ma non riesco proprio a risolvere...
  • Re: Programma che non si chiude

    Vuoi risolvere questo esercizio o vuoi imparare a programmare un pò meglio? Perche secondo me si potrebbe fare anche meglio sto programmino, iniziando dalla eliminazione delle variabili globali.
    Cmq nel tuo caso dovresti guardare il fatto che se uno trova tutta la parola non c'è niente che li indichi che la parola è stata trovata in cui il controllo lo fai solo sul numero dei tentativi.
  • Re: Programma che non si chiude

    Sto imparando da autodidatta, perché all'università ho iniziato (io come altri 30 colleghi) con parecchio tempo di ritardo, ed ovviamente le lezioni erano già iniziate da tempo. Quindi ogni consiglio per me vale oro!
  • Re: Programma che non si chiude

    Ti ho fatto un esempio rapido. Vedi ciò che non capisci e chiedi info.
    
    #include <iostream>
    #include <string>
    
    #define NUM_TENTATIVI 6
    
    using namespace std;
    
    bool presente(string & input, char lettura, bool ind[]);
    void stampaStringa(string & input, bool ind[]);
    bool parolaTrovata(bool ind[], const int length);
    
    int main()
    {
    	string parolaDaCercare;
    	char lettura;
    	int tentativi = NUM_TENTATIVI;
    	bool trovata = false;
    
    	cout << "Inserisci la stringa da cercare:\t";
    	getline(cin,parolaDaCercare);
    
    	const int length = parolaDaCercare.length();
    	bool *indovinati = new bool[length];
    	for(int i = 0; i < length; i++)
    	{
    		if(parolaDaCercare[i] == ' ') //considero spazi come trovati
    			indovinati[i] = true;
    		else
    			indovinati[i] = false;
    		cout << " - ";
    	}
    
    	cout << endl;
    	cout << "Inserisci una lettera:\t";
    	cin >> lettura;
    
    	while(tentativi > 1 && !trovata)
    	{
    		if(!presente(parolaDaCercare,lettura,indovinati))
    		{
    			tentativi--;
    			cout << "Lettera non presente nella parola! Tentativi rimamenti= " << tentativi << endl << endl;
    		}
    		stampaStringa(parolaDaCercare,indovinati);
    
    		if(parolaTrovata(indovinati,length))
    		{
    			cout<<"Hai indovinato la parola!"<<endl<< "\n";
    			trovata = true;
    		}
    		else
    		{
    			cin>>lettura;
    		}
    	}
    	if(!trovata)
    	{
    		cout<<"Hai perso!"<<endl<< "\n";
    	}
    	delete [] indovinati;
    	system ("pause");
    }
    
    bool presente(string & input, char lettura, bool ind[])
    {
    	for(size_t pos = 0; pos < input.length(); ++pos)
    	{
    		if(input[pos] == lettura)
    		{
    			ind[pos] = true;
    		}
    	}
    	return input.find(lettura) != string::npos;
    }
    
    void stampaStringa(string & input, bool ind[])
    {
    	for(size_t i=0; i < input.length(); i++)
    	{
    		if(ind[i])
    			cout << input[i] << " ";
    		else
    			cout<<" - ";
    	}
    	cout<<endl;
    }
    
    bool parolaTrovata(bool ind[], const int length)
    {
    	for(int i=0; i < length; i++)
    	{
    		if(ind[i] == false)
    			return false;
    	}
    	return true;
    }
    
    
  • Re: Programma che non si chiude

    Grazie, gentilissimo! Sto guardando attentamente il codice, se ho problemi chiederò =)
Devi accedere o registrarti per scrivere nel forum
5 risposte