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
Barbara Streisandoriginal
2024-12-19 07:49:09190parcourir

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)

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
}

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!

Déclaration:
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