Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema scanf!
Forum - C/C++ - Problema scanf!

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
-Meng0- (Normal User)
Rookie


Messaggi: 40
Iscritto: 01/01/2011

Segnala al moderatore
Postato alle 9:31
Lunedì, 21/02/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++

  1. /*Settaggio del colore dei caratteri della console al colore di default*/
  2.     HANDLE hConsole3;
  3.     hConsole3 = GetStdHandle(STD_OUTPUT_HANDLE);
  4.     SetConsoleTextAttribute (hConsole3, 7);
  5.    
  6.     printf("Si desidera effettuare una nuova partita? (s/n) \n");
  7.     scanf("%c", &answer);
  8.    
  9.     if (answer == 's' || answer == 'S')
  10.     {
  11.         //Pulizia della console
  12.         system("cls");
  13.         //Primo metodo per il settaggio della grafica della console
  14.         Splash_Screen();
  15.         //Metodo centrale: creazione e valorizzazione delle strutture dati e svolgimento della partita
  16.         Partita();
  17.         //Metodo per il calcolo e la stampa a video dei punteggi totalizzati
  18.         Controllo_Vincitore();
  19.         //Si attende la pressione di un tasto per continuare
  20.         system ("pause");
  21.     }
  22.     else
  23.     {
  24.         printf("\nSessione di gioco terminata, premere un tasto per uscire.\n\n");
  25.         system("pause");
  26.         return;
  27.     }



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

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 10:14
Lunedì, 21/02/2011
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++

  1. char answer[1];// può contenere solo un carattere
  2.  
  3. printf("nuova partita? (s/n)");
  4.  
  5. scanf("%s",answer);
  6.  
  7. if(strcmp(answer,"s") == 0 || strcmp(answer,"S") == 0 ){
  8. //.............
  9. }else{
  10. //.........
  11. }


strcmp() restituisce 0 se i due array di caratteri passati come param sono uguali.
Spero di esserti stato d'aiuto.

PM Quote
Avatar
-Meng0- (Normal User)
Rookie


Messaggi: 40
Iscritto: 01/01/2011

Segnala al moderatore
Postato alle 10:55
Lunedì, 21/02/2011
Ora lo provo poi ti faccio sapere subito:k:
Mi sembrava molto più semplificato utilizzando un singolo char:-|

PM Quote
Avatar
-Meng0- (Normal User)
Rookie


Messaggi: 40
Iscritto: 01/01/2011

Segnala al moderatore
Postato alle 11:02
Lunedì, 21/02/2011
Guarda ora la mia funzione (per intero) è la seguente:
Codice sorgente - presumibilmente C/C++

  1. void Nuova_Partita(void)
  2. {
  3.     /*Settaggio del colore dei caratteri della console al colore di default*/
  4.     HANDLE hConsole3;
  5.     hConsole3 = GetStdHandle(STD_OUTPUT_HANDLE);
  6.     SetConsoleTextAttribute (hConsole3, 7);
  7.    
  8.     printf("Si desidera effettuare una nuova partita? (s/n) \n");
  9.     scanf("%c", &answer);
  10.    
  11.     if (strcmp(answer, "s") == 0 || strcmp(answer, "S") == 0)
  12.     {
  13.         //Pulizia della console
  14.         system("cls");
  15.         //Primo metodo per il settaggio della grafica della console
  16.         Splash_Screen();
  17.         //Metodo centrale: creazione e valorizzazione delle strutture dati e svolgimento della partita
  18.         Partita();
  19.         //Metodo per il calcolo e la stampa a video dei punteggi totalizzati
  20.         Controllo_Vincitore();
  21.         //Si attende la pressione di un tasto per continuare
  22.         system ("pause");
  23.     }
  24.     else
  25.     {
  26.         printf("\nSessione di gioco terminata, premere un tasto per uscire.\n\n");
  27.         system("pause");
  28.         return;
  29.     }    
  30. }



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


PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 13:01
Lunedì, 21/02/2011
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



PM Quote
Avatar
-Meng0- (Normal User)
Rookie


Messaggi: 40
Iscritto: 01/01/2011

Segnala al moderatore
Postato alle 13:16
Lunedì, 21/02/2011
Risolto, funziona!
Grazie mille Bonny:k:
Mi ero dimenticato di sostituire il %c con %s, nella fretta;)
Grazie ancora:k:

PM Quote
Avatar
-Meng0- (Normal User)
Rookie


Messaggi: 40
Iscritto: 01/01/2011

Segnala al moderatore
Postato alle 13:29
Lunedì, 21/02/2011
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.

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 16:27
Lunedì, 21/02/2011
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.

PM Quote
Avatar
-Meng0- (Normal User)
Rookie


Messaggi: 40
Iscritto: 01/01/2011

Segnala al moderatore
Postato alle 17:11
Lunedì, 21/02/2011
Avevo risolto facendo proprio una cosa del genere:k:
Finalmente ho finito questo progetto!
Sono pienamente soddisfatto.
Ti ringrazio nuovamente per avermi aiutato, se sono arrivato al termine un po' è anche merito tuo!

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo