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
Libérer: 2024-10-27 07:26:28
original
354 Les gens l'ont consulté

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

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!

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