|
|
|
![]() |
|
Strumenti |
![]() |
#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. |
![]() |
![]() |
![]() |
#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() |
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#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); |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Spiega meglio cosa ti succedeva. Hai usato qualche altra funzione per l'input oltre a scanf ? Ad esempio gets ? |
|
![]() |
![]() |
![]() |
#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
![]() PS: quando posti codice, scrivilo all'interno degli appositi tag Codice PHP:
|
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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. |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: May 2006
Messaggi: 86
|
alternativamente ( e vado a memoria), modifica lo scanf cosi:
Codice PHP:
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Così non funziona
![]() 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. |
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ma tu già usavi %c
![]() Il problema è leggere con %c dopo che hai letto con altri specificatori di formato. |
![]() |
![]() |
![]() |
#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. |
|
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
In effetti è quello che ti ripetiamo dall'inizio
![]() Sulla tua soluzione, non lo so, non l'ho mai provata. |
![]() |
![]() |
![]() |
#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: 04:09.