Ecco un problema che mi tormenta in questo momento. Quando si ottiene input da parte dell'utente, voglio impiegare un ciclo per chiedere all'utente di riprovare fino a quando non entrano input valido:Come svuotare Stdin dopo fmt.Scanf() in Go?
// user_input.go
package main
import (
"fmt"
)
func main() {
fmt.Println("Please enter an integer: ")
var userI int
for {
_, err := fmt.Scanf("%d", &userI)
if err == nil {
break
}
fmt.Println("Sorry, invalid input. Please enter an integer: ")
}
fmt.Println(userI)
}
esecuzione quanto sopra, se l'utente inserisce input valido, nessun problema:
Inserisci un numero intero:
codice di uscita 0, processo terminato normalmente.
Ma provare a inserire una stringa?
Immettere un numero intero: cosa?
Spiacente, input non valido. Per favore inserisci un numero intero:
Siamo spiacenti, input non valido. Per favore inserisci un numero intero:
Spiacente ...
Ecc, e continua a scorrere carattere per carattere finché la stringa non è esaurita. Anche inserendo due volte un singolo carattere, presumo mentre analizza la nuova riga.
In ogni caso, deve esistere un modo per svuotare Stdin in Go?
P.S. In assenza di una tale funzionalità, come faresti a lavorarci intorno per fornire funzionalità equivalenti? Ho fallito anche in questo ...
Questa è una buona soluzione. Grazie! –
Basta usare 'Scanln' che è documentato come spazio bianco consumante e lettura fino alla nuova riga. –