-Meng0- (Normal User)
Rookie
Messaggi: 40
Iscritto: 01/01/2011
|
Ho scritto un programmino che simula una partita ad un gioco tipo scarabeo.
Mi è stato chiesto di permettere all'utente di poter scegliere, una volta terminata la partita, se giocare nuovamente.
Per far ciò ho creato una nuova funzione che viene richiamata ogni volta dall'ultima funzione del programma, ed è la seguente:
Codice sorgente - presumibilmente C/C++ |
/*Settaggio del colore dei caratteri della console al colore di default*/
HANDLE hConsole3;
hConsole3 = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute (hConsole3, 7);
printf("Si desidera effettuare una nuova partita? (s/n) \n");
scanf("%c", &answer);
if (answer == 's' || answer == 'S')
{
//Pulizia della console
system("cls");
//Primo metodo per il settaggio della grafica della console
Splash_Screen();
//Metodo centrale: creazione e valorizzazione delle strutture dati e svolgimento della partita
Partita();
//Metodo per il calcolo e la stampa a video dei punteggi totalizzati
Controllo_Vincitore();
//Si attende la pressione di un tasto per continuare
system ("pause");
}
else
{
printf("\nSessione di gioco terminata, premere un tasto per uscire.\n\n");
system("pause");
return;
}
|
Benissimo. La funzione viene richiamata ed eseguita correttamente, fino alla scanf. La printf viene stampata a video ma non si ferma ad attendere l'inserimento dell'utente, salta direttamente al system("pause") dicendo "Premere un tasto per continuare..."
Non so come farlo fermare su questa scanf, aiutoo
|
|
Bonny (Member)
Expert
Messaggi: 437
Iscritto: 24/04/2009
|
secondo me l'errore è la var answer come hai dichiarato tale var?? il "%c" non mi convince... io farei cosi:
Codice sorgente - presumibilmente C/C++ |
char answer[1];// può contenere solo un carattere
printf("nuova partita? (s/n)");
scanf("%s",answer);
if(strcmp(answer,"s") == 0 || strcmp(answer,"S") == 0 ){
//.............
}else{
//.........
}
|
strcmp() restituisce 0 se i due array di caratteri passati come param sono uguali.
Spero di esserti stato d'aiuto.
|
|
-Meng0- (Normal User)
Rookie
Messaggi: 40
Iscritto: 01/01/2011
|
Ora lo provo poi ti faccio sapere subito
Mi sembrava molto più semplificato utilizzando un singolo char
|
|
-Meng0- (Normal User)
Rookie
Messaggi: 40
Iscritto: 01/01/2011
|
Guarda ora la mia funzione (per intero) è la seguente:
Codice sorgente - presumibilmente C/C++ |
void Nuova_Partita(void)
{
/*Settaggio del colore dei caratteri della console al colore di default*/
HANDLE hConsole3;
hConsole3 = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute (hConsole3, 7);
printf("Si desidera effettuare una nuova partita? (s/n) \n");
scanf("%c", &answer);
if (strcmp(answer, "s") == 0 || strcmp(answer, "S") == 0)
{
//Pulizia della console
system("cls");
//Primo metodo per il settaggio della grafica della console
Splash_Screen();
//Metodo centrale: creazione e valorizzazione delle strutture dati e svolgimento della partita
Partita();
//Metodo per il calcolo e la stampa a video dei punteggi totalizzati
Controllo_Vincitore();
//Si attende la pressione di un tasto per continuare
system ("pause");
}
else
{
printf("\nSessione di gioco terminata, premere un tasto per uscire.\n\n");
system("pause");
return;
}
}
|
E il risultato appena arrivo li è che non mi permette neanche di selezionare "s" o "n", mi stampa subito:
Si desidera effettuare una nuova partita? (s/n)
Sessione di gioco terminata, premere un tasto per uscire.
Premere un tasto per continuare...
|
|
Bonny (Member)
Expert
Messaggi: 437
Iscritto: 24/04/2009
|
ma dichiara la variabile answer all'interno della funzione o al limite ne dichiari un altra se answer ti serve in altre parti del programma...
e poi su scanf() metti il %s senza la & nel secondo parametro..
per usare strcmp si deve includere #include<string.h> vedi qui http://it.wikipedia.org/wiki/String.h
|
|
-Meng0- (Normal User)
Rookie
Messaggi: 40
Iscritto: 01/01/2011
|
Risolto, funziona!
Grazie mille Bonny
Mi ero dimenticato di sostituire il %c con %s, nella fretta
Grazie ancora
|
|
-Meng0- (Normal User)
Rookie
Messaggi: 40
Iscritto: 01/01/2011
|
Uso lo stesso topic per un altro problema
Praticamente all'interno del gioco il giocatore deve digitare una parola e il programma deve scorrere un file di testo (composto da una parola per riga) e verificare se la parola digitata è presente all'interno del file .txt!
Bene, io utilizzo un vettore di 30 char che contiene la parola digitata dall'utente e leggendo parola per parola il file la confronto ad ogni iterazione con una delle parole del file.
Il problema è che l'uguaglianza non mi si verifica mai. Se anche l'utente digita una parola che effettivamente è presente dentro il file il mio algoritmo non riconosce mai l'uguaglianza fra la parola digitata dall'utente e una di quelle all'interno del file.
|
|
Bonny (Member)
Expert
Messaggi: 437
Iscritto: 24/04/2009
|
Anbigua sta cosa
prova cosi... ogni volta che leggi una parola dal file assegnala ad un array per esempio char temp[30] fallo con la funzione strcpy(array1, array2)
qst'ultima copia array2 in array1 nel nostro caso strcpy(temp,"parola_letta");
poi fai il confronto con la strcmp tra la parola che sta in temp e la parola digitata dall'utente... forse c'è un modo per scrivere meno codice ma con questa soluzione almeno prendi confidenza con string.h indispensabile per lavorare con le "stringhe" in C.
|
|
-Meng0- (Normal User)
Rookie
Messaggi: 40
Iscritto: 01/01/2011
|
Avevo risolto facendo proprio una cosa del genere
Finalmente ho finito questo progetto!
Sono pienamente soddisfatto.
Ti ringrazio nuovamente per avermi aiutato, se sono arrivato al termine un po' è anche merito tuo!
|
|