Maison > développement back-end > Golang > Pourquoi fmt.Scanf n'attend-il pas toujours la saisie de l'utilisateur dans Go ?

Pourquoi fmt.Scanf n'attend-il pas toujours la saisie de l'utilisateur dans Go ?

Barbara Streisand
Libérer: 2024-12-19 07:49:09
original
250 Les gens l'ont consulté

Why Doesn't fmt.Scanf Always Wait for User Input in Go?

Comprendre le problème avec fmt.Scanf 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.

Explication

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.

Solution de contournement

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)
Copier après la connexion

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.

Validation des entrées utilisateur

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
}
Copier après la connexion

Conclusion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal