Maison >développement back-end >Golang >Pourquoi fmt.Scanf n'attend-il pas toujours la saisie de l'utilisateur dans Go ?
Dans Go, la fonction fmt.Scanf vous permet de lire les entrées de l'utilisateur et de les stocker dans des variables spécifiées. Cependant, les utilisateurs rencontrent parfois un problème où fmt.Scanf n'attend pas la saisie de l'utilisateur après la première analyse et passe immédiatement aux invites suivantes.
Dans Go, fmt.Scanf lit caractères depuis l'entrée standard jusqu'au premier délimiteur (généralement une nouvelle ligne). Dans les versions antérieures de Go, il ne considérait pas un retour chariot (r) suivi d'une nouvelle ligne (n) comme délimiteur valide sur les systèmes Windows. Cela a provoqué l'arrêt prématuré de fmt.Scanf après la lecture du premier caractère saisi par l'utilisateur.
Pour résoudre ce problème, une solution de contournement simple consiste à utiliser explicitement le délimiteur n dans la chaîne de format. transmis à fmt.Scanf. Par exemple :
var inputSquare float64 fmt.Scanf("%f\n", &inputSquare)
En incluant le n dans la chaîne de format, vous dites à fmt.Scanf d'attendre une nouvelle ligne avant de considérer la saisie comme terminée. Cela garantit que le programme s'arrête jusqu'à ce que l'utilisateur appuie sur Entrée et termine sa saisie.
Pour valider les entrées utilisateur pour les entiers, vous pouvez utiliser la fonction strconv.ParseInt, qui vérifie si la chaîne saisie peut être analysée en un entier et renvoie toutes les erreurs rencontrées. Par exemple :
inputSquare, err := strconv.ParseInt(inputSquareString, 10, 64) if err != nil { // Handle error }
En utilisant la technique susmentionnée, vous pouvez résoudre efficacement le problème de fmt.Scanf n'attendant pas la saisie de l'utilisateur dans Go et implémenter une validation de saisie appropriée pour les entiers.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!