Maison >développement back-end >Golang >Comment gérer les entrées invalides et vider les entrées standard après « fmt.Scanf() » dans Go ?

Comment gérer les entrées invalides et vider les entrées standard après « fmt.Scanf() » dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-27 07:26:28356parcourir

How to Handle Invalid Input and Flush Standard Input After `fmt.Scanf()` in Go?

Vinage de Stdin après fmt.Scanf() dans Go

Problème :Lors de l'utilisation de fmt.Scanf() pour obtenir une entrée utilisateur, il peut devenir difficile de gérer efficacement les entrées non valides. Si un utilisateur saisit des caractères non numériques, la boucle continue de s'itérer, créant une expérience indésirable.

Résolution :

Pour résoudre ce problème, il est crucial de vider stdin (entrée standard) après chaque demande d'entrée. Ce faisant, tous les caractères invalides restants dans le tampon d'entrée sont supprimés, garantissant que la demande d'entrée suivante commence par une table rase.

Solution utilisant fmt.Scanln :

La fonction fmt.Scanln peut être utilisée pour lire une chaîne depuis stdin et gérer automatiquement les caractères de nouvelle ligne. En utilisant fmt.Scanln, la boucle peut être simplifiée sans nécessiter un vidage explicite de stdin :

<code class="go">package main

import (
    "fmt"
)

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

    // Read in an integer
    var userI int
    _, err := fmt.Scanln(&userI)
    if err != nil {
        fmt.Printf("Error: %s", err.Error())
        return
    }
    fmt.Println(userI)
}</code>

Solutions alternatives :

En l'absence d'un Fonction de vidage stdin, des solutions alternatives peuvent être utilisées :

  • Utilisation de io.Discard : La valeur io.Discard peut être transmise à fmt.Scanf() pour éliminer les entrées non valides.
  • Combinaison de fmt.Scanf() et bufio : En combinant fmt.Scanf() avec le package bufio, la fonction ReadString() peut être exploitée pour lire une ligne entière d'entrée, ignorer les éléments invalides caractères et continuez la boucle.

Conclusion :

Bien qu'il n'y ait pas de fonction de vidage stdin intégrée dans Go, des techniques telles que l'utilisation de fmt.Scanln ou des solutions alternatives peuvent gérer efficacement les entrées non valides et maintenir une boucle conviviale.

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