Oppure

Loading
21/02/11 8:31
-Meng0-
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:

 /*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:d
aaa
21/02/11 9:14
Bonny
secondo me l'errore è la var answer come hai dichiarato tale var?? il "%c" non mi convince... io farei cosi:
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.
aaa
21/02/11 9:55
-Meng0-
Ora lo provo poi ti faccio sapere subito:k:
Mi sembrava molto più semplificato utilizzando un singolo char:-|
aaa
21/02/11 10:02
-Meng0-
Guarda ora la mia funzione (per intero) è la seguente:
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...

:d

aaa
21/02/11 12:01
Bonny
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 it.wikipedia.org/wiki/…


aaa
21/02/11 12:16
-Meng0-
Risolto, funziona!
Grazie mille Bonny:k:
Mi ero dimenticato di sostituire il %c con %s, nella fretta;)
Grazie ancora:k:
aaa
21/02/11 12:29
-Meng0-
Uso lo stesso topic per un altro problema:d
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.
aaa
21/02/11 15:27
Bonny
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.
aaa