|
|
|
|
Strumenti |
11-12-2009, 09:41 | #1 |
Senior Member
Iscritto dal: Jun 2008
Messaggi: 551
|
[C] problema scanf
ciao a tutti il mio problema è questo.
mi sto esercitando per l'esame di programmazione e qualche giorno fa mi capitò che uno scanf per un carattere non mi funzionava anche se a mio avviso la sintassi è corretta.cmq continuai ad esercitarmi. oggi mi ritrovo dinanzi ad un altro scanf per l'aquisizione di un carattere e ancora problemi in pratica ho un ciclo do while con la condizione che (choice=='y') ora questo scanf mi fa saltare tutto: printf("Would you like to play again? (y or n)?\n"); scanf("%c", &choice); la variabile è char choice='y'; spero riuscite a capire perchè gli scanf per i caratteri non mi funzionano cosa sbaglio??? grazieeeeeee
__________________
Se non hai ancora deciso per il tuo futuro Don'T panic!!! segui le tue passioni, ti porteranno lontano. |
11-12-2009, 11:11 | #2 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Non conosco il C ma prova ad usare getchar() che restituisce un int(il carattere letto).
Codice:
int getchar() |
11-12-2009, 11:25 | #3 |
Senior Member
Iscritto dal: Jun 2008
Messaggi: 551
|
si ma io dovrei usare cose che abbiamo affrontato durante il corso
__________________
Se non hai ancora deciso per il tuo futuro Don'T panic!!! segui le tue passioni, ti porteranno lontano. |
11-12-2009, 11:44 | #4 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Non avete fatto la funzione getchar()? Vi ha mai parlato della funzione fflush()? Prova a mettere subito dopo la scanf questa istruzione:
Codice:
fflush(stdin); |
11-12-2009, 11:54 | #5 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53968
|
Quote:
Spiega meglio cosa ti succedeva. Hai usato qualche altra funzione per l'input oltre a scanf ? Ad esempio gets ? |
|
11-12-2009, 12:05 | #6 |
Member
Iscritto dal: May 2006
Messaggi: 86
|
Prova a postare il codice per intero, di certo è più utile che qualche riga qua e la e sicuro di aver dichiarato choice come char e non come stringa? a quel punto l'& andrebbe levato.
PS: quando posti codice, scrivilo all'interno degli appositi tag Codice PHP:
|
11-12-2009, 14:40 | #7 |
Senior Member
Iscritto dal: Jun 2008
Messaggi: 551
|
Codice PHP:
__________________
Se non hai ancora deciso per il tuo futuro Don'T panic!!! segui le tue passioni, ti porteranno lontano. |
11-12-2009, 15:08 | #8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53968
|
C'è un invio che resta nello stdin.
Il problema è dovuto a scanf con %c che legge qualsiasi carattere presente nello stdin, anche uno '\n', cioè l'invio. La prima scanf lascia l'invio nello stdin, la seconda trova l'invio, lo assegna a choice ed esce perché choice è diverso da 'y'. se potessi usare la getchar si farebbe: while(getchar() != '\n'); Legge tutti i caratteri nello stdin fino a quando non trova uno '\n'. Visto che la puoi usare per togliere lo '\n' puoi fare così: do scanf("%c", &choice); while(choice != '\n'); E dopo leggi nuovamente choice. |
11-12-2009, 23:43 | #9 |
Member
Iscritto dal: May 2006
Messaggi: 86
|
alternativamente ( e vado a memoria), modifica lo scanf cosi:
Codice PHP:
|
12-12-2009, 07:19 | #10 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53968
|
Così non funziona Anzi, ti chiede un nuovo input da stdin che dopo ti rimane nel buffer.
Così semmai posso leggere sia l'intero che lo '\n': scanf("%d%c", &guess, &tmp); Ultima modifica di cionci : 12-12-2009 alle 07:22. |
16-12-2009, 19:21 | #11 |
Senior Member
Iscritto dal: Jun 2008
Messaggi: 551
|
RISOLTO!!!
Codice PHP:
mentre per l'immissione di stringhe: Codice PHP:
per i singoli caratteri si usa %c ciao a tutti e grazie spero di essere stato utile!!!
__________________
Se non hai ancora deciso per il tuo futuro Don'T panic!!! segui le tue passioni, ti porteranno lontano. |
16-12-2009, 19:24 | #12 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53968
|
Ma tu già usavi %c
Il problema è leggere con %c dopo che hai letto con altri specificatori di formato. |
17-12-2009, 10:50 | #13 | |
Senior Member
Iscritto dal: Jun 2008
Messaggi: 551
|
Quote:
ah......
__________________
Se non hai ancora deciso per il tuo futuro Don'T panic!!! segui le tue passioni, ti porteranno lontano. |
|
17-12-2009, 11:09 | #14 |
Senior Member
Iscritto dal: Jun 2008
Messaggi: 551
|
mi sono soffermato tu questo punto e informandomi un pò ho capito che ogni volta che si inserisce un numero (o chicchessia) in input il numero viene inserito in in area di memoria chiamata buffer e da lì lo scanf legge e porta nella variabile dove devono essere memorizzati però!
il però è che lo scanf non si prende l'invio che resta quindi nel buffer, di conseguenza al successivo scanf del famoso carattere si va a prendere l'invio e non considera il carattere e quindi una soluzione che ho trovato è Codice PHP:
__________________
Se non hai ancora deciso per il tuo futuro Don'T panic!!! segui le tue passioni, ti porteranno lontano. |
17-12-2009, 11:11 | #15 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53968
|
In effetti è quello che ti ripetiamo dall'inizio
Sulla tua soluzione, non lo so, non l'ho mai provata. |
17-12-2009, 11:44 | #16 |
Senior Member
Iscritto dal: Jun 2008
Messaggi: 551
|
provaci, funziona!!!
__________________
Se non hai ancora deciso per il tuo futuro Don'T panic!!! segui le tue passioni, ti porteranno lontano. |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:11.