Maison  >  Article  >  développement back-end  >  Comment gérer les entrées utilisateur non valides dans les boucles Go : pourquoi fmt.Scanln() est la solution ?

Comment gérer les entrées utilisateur non valides dans les boucles Go : pourquoi fmt.Scanln() est la solution ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-31 18:25:02876parcourir

How to Handle Invalid User Input in Go Loops: Why fmt.Scanln() is the Solution?

Vinage des entrées dans Go pour une réponse utilisateur valide

Comprendre le problème

Lors de l'utilisation de fmt.Scanf() pour lire les entrées de l'utilisateur en boucle, il peut rencontrer des problèmes si une entrée non valide est saisie. La saisie de l'utilisateur peut s'étendre au-delà du format attendu, entraînant plusieurs itérations de la boucle. En effet, fmt.Scanf() n'écarte pas automatiquement les entrées non valides, ce qui entraîne un flux continu de messages d'erreur jusqu'à ce que l'intégralité de l'entrée non valide soit traitée.

Résoudre le problème avec fmt.Scanln()

Une solution pour vider stdin et éviter ce problème consiste à utiliser fmt.Scanln() au lieu de fmt.Scanf(). fmt.Scanln() est conçu pour lire une ligne entière d'entrée, y compris le caractère de nouvelle ligne. En utilisant fmt.Scanln(), le processus de saisie se terminera dès qu'il rencontrera un caractère de nouvelle ligne, effaçant ainsi le tampon de saisie standard et garantissant que les tentatives de saisie ultérieures démarrent avec une table rase.

Exemple d'utilisation

Voici un exemple qui montre comment utiliser fmt.Scanln() pour demander à l'utilisateur une entrée entière et gérer les entrées non valides avec élégance :

<code class="go">package main

import (
    "fmt"
)

func main() {
    fmt.Println("Please enter an integer: ")

    var input string
    fmt.Scanln(&input)

    var number int
    _, err := fmt.Sscanf(input, "%d", &number)

    if err != nil {
        fmt.Println("Invalid input. Please enter an integer: ")
        return
    }

    fmt.Println("You entered:", number)
}</code>

Dans cet exemple, nous lisons d'abord l'entrée de l'utilisateur sous forme de chaîne en utilisant fmt.Scanln(). Cela garantit que tous les caractères non valides sont vidés du tampon d'entrée. En fait, nous essayons d'analyser la chaîne d'entrée sous forme d'entier en utilisant fmt.Sscanf(). Si l’analyse réussit, le programme utilise l’entier analysé. Si l'analyse échoue, elle invite l'utilisateur à saisir à nouveau l'entrée, en supprimant toute entrée non valide qui aurait pu être saisie précédemment.

Conclusion

En utilisant fmt.Scanln() pour lire l'utilisateur entrée dans une boucle, nous pouvons effectivement vider l’entrée standard et gérer les entrées invalides avec élégance. Cette approche fournit un mécanisme de gestion des entrées plus robuste et plus fiable, garantissant que le programme peut continuer à demander à l'utilisateur une entrée valide jusqu'à ce qu'elle soit obtenue.

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