Maison  >  Article  >  développement back-end  >  Comment utiliser la méthode d'analyse pour implémenter la saisie de la console

Comment utiliser la méthode d'analyse pour implémenter la saisie de la console

PHPz
PHPzoriginal
2023-04-11 09:13:34868parcourir

En langage Go, vous pouvez utiliser la méthode scan pour lire les données à partir de l'entrée standard. La méthode scan peut lire tout type de données, y compris des chaînes, des nombres, des valeurs booléennes, etc. Cet article présentera en détail comment utiliser la méthode scan pour implémenter la saisie dans la console. scan方法从标准输入中读取数据。scan方法可以读取任意类型的数据,包括字符串、数字、布尔值等等。本文将详细介绍如何使用scan方法实现控制台输入。

基本语法

scan方法的基本语法如下:

func Scan(a ...interface{}) (n int, err error)

从输入中读取数据,并将其存储到指定的参数中。参数a表示需要读取的数据,可以传递任意个参数,每个参数都是一个指针类型,用于存储输入的数据。返回值n表示成功读取的参数个数,返回值err表示可能出现的错误。

下面是一个简单的例子,演示如何从控制台中读取两个整数:

func main() {
    var a, b int
    fmt.Print("请输入两个整数:")
    n, err := fmt.Scan(&a, &b)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("成功读取了 %d 个参数:%v\n", n, []int{a, b})
}

通过上面的代码,我们可以看到Scan方法的基本用法。执行上面的代码,程序将提示用户输入两个整数,用户输入完成后,程序会将这两个整数存储到变量ab中,并输出这两个整数。

scan的特性

Scan方法有以下几个特性:

1. 忽略空格

Scan方法在读取数据时,会自动忽略掉数据之间的空格。如下面的代码所示:

func main() {
    var a, b, c string
    fmt.Print("请输入三个字符串:")
    n, err := fmt.Scan(&a, &b, &c)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("成功读取了 %d 个参数:%v\n", n, []string{a, b, c})
}

输入字符串hello world go,程序将自动忽略掉字符串之间的空格,并输出这三个字符串。

2. 等待回车

Scan方法在读取数据时,会等待用户输入回车符n,表示输入完成。如果用户没有输入回车符,程序将一直等待用户输入。如下面的代码所示:

func main() {
    var s string
    fmt.Print("请输入一个字符串:")
    n, err := fmt.Scan(&s)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("成功读取了 %d 个参数:%v\n", n, s)
}

输入字符串hello后,程序并不会立即输出结果,而是等待用户输入回车符n,才会输出结果。

3. 不会读取换行符

Scan方法在读取数据时,不会读取输入中的换行符n。比如,当我们通过Scan方法读取一个字符串时,输入字符串中的换行符n不会被读取。如下面的代码所示:

func main() {
    var s string
    fmt.Print("请输入一个字符串:")
    n, err := fmt.Scan(&s)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("成功读取了 %d 个参数:%v\n", n, s)
}

输入字符串hellonworld,程序只会读取到字符串hello,不会读取到字符串中的换行符n

深入分析

Scan方法的实现是基于fmt包的Scanf函数。Scanf方法有以下几个特性:

1. 格式化输入

Scanf方法支持格式化输入。可以通过格式化字符串指定需要读取的数据类型。比如,我们可以通过以下格式化字符串读取一个整数和一个字符串:

func main() {
    var a int
    var b string
    fmt.Print("请输入一个整数和一个字符串:")
    n, err := fmt.Scanf("%d %s", &a, &b)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("成功读取了 %d 个参数:%v\n", n, []interface{}{a, b})
}

上面的代码中,定义的格式化字符串"%d %s"表示先读取一个整数,再读取一个字符串,中间用空格分隔。

2. 自定义分隔符

Scanf方法支持自定义分隔符。默认情况下,Scanf方法以空格作为分隔符。可以通过Scanf方法的ScanState参数,自定义分隔符。如下面的代码所示:

func main() {
    var a, b string
    fmt.Print("请输入两个字符串,用逗号分隔:")
    s := bufio.NewScanner(os.Stdin)
    s.Split(func(data []byte, atEOF bool) (adv int, token []byte, err error) {
        for i := 0; i < len(data); i++ {
            if data[i] == ',' {
                return i + 1, data[:i], nil
            }
        }
        return 0, data, bufio.ErrFinalToken
    })
    if s.Scan() {
        a = s.Text()
    }
    if s.Scan() {
        b = s.Text()
    }
    fmt.Printf("您输入的字符串是:%v\n", []string{a, b})
}

上面的代码中,我们通过bufio包的NewScanner方法创建一个Scanner对象,并通过Split方法自定义了分隔符。在分隔函数中,我们将逗号作为分隔符,以解析输入字符串,并将其存储到变量ab中。

总结

通过本文的介绍,我们了解了Scan方法的基本语法、特性以及如何实现控制台输入。需要注意的是,Scan方法在处理输入时,不会将换行符n读取到输入中。另外,Scanf

Syntaxe de base

La syntaxe de base de la méthode scan est la suivante : 🎜rrreee🎜Lire les données de l'entrée et les stocker dans les paramètres spécifiés. Le paramètre a représente les données qui doivent être lues. N'importe quel nombre de paramètres peut être transmis. Chaque paramètre est un type de pointeur utilisé pour stocker les données d'entrée. La valeur de retour n indique le nombre de paramètres lus avec succès, et la valeur de retour err indique des erreurs possibles. 🎜🎜Ce qui suit est un exemple simple qui montre comment lire deux entiers depuis la console : 🎜rrreee🎜Grâce au code ci-dessus, nous pouvons voir l'utilisation de base de la méthode Scan. En exécutant le code ci-dessus, le programme invitera l'utilisateur à saisir deux entiers. Une fois la saisie utilisateur terminée, le programme stockera les deux entiers dans les variables a et b. et affichez ces deux entiers. 🎜

Caractéristiques de la numérisation

🎜La méthode Scan présente les caractéristiques suivantes : 🎜

1 Ignorer les espaces

🎜La méthode Scan dans When. lors de la lecture des données, les espaces entre les données seront automatiquement ignorés. Comme le montre le code suivant : 🎜rrreee🎜Entrez la chaîne hello world go, le programme ignorera automatiquement les espaces entre les chaînes et affichera ces trois chaînes. 🎜

2. En attente du retour chariot

🎜Lorsque la méthode Scan lit les données, elle attendra que l'utilisateur saisisse le caractère de retour chariot n, indiquant que la saisie est terminée. Si l'utilisateur ne saisit pas de caractère de retour chariot, le programme attendra la saisie de l'utilisateur. Comme le montre le code suivant : 🎜rrreee🎜Après avoir saisi la chaîne hello, le programme n'affichera pas le résultat immédiatement, mais attendra que l'utilisateur entre le caractère de retour chariot n. Résultats de sortie. 🎜

3. Le caractère de nouvelle ligne ne sera pas lu

🎜La méthode Scan ne lira pas le caractère de nouvelle ligne n dans l'entrée lors de la lecture des données. Par exemple, lorsque nous lisons une chaîne via la méthode Scan, le caractère de nouvelle ligne n dans la chaîne d'entrée ne sera pas lu. Comme le montre le code suivant : 🎜rrreee🎜Entrez la chaîne hellonworld, le programme lira uniquement la chaîne hello et ne lira pas le caractère de nouvelle ligne dans la chaîne n. 🎜

Analyse approfondie

🎜L'implémentation de la méthode Scan est basée sur la fonction Scanf du package fmt . La méthode Scanf présente les fonctionnalités suivantes : 🎜

1. Entrée formatée

🎜La méthode Scanf prend en charge l'entrée formatée. Vous pouvez spécifier le type de données à lire via une chaîne de format. Par exemple, nous pouvons lire un entier et une chaîne via la chaîne de format suivante : 🎜rrreee🎜Dans le code ci-dessus, la chaîne de format définie "%d %s" signifie lire d'abord Un entier, puis lire une chaîne, séparée par des espaces. 🎜

2. Délimiteur personnalisé

🎜La méthode Scanf prend en charge le délimiteur personnalisé. Par défaut, la méthode Scanf utilise des espaces comme délimiteurs. Vous pouvez personnaliser le délimiteur via le paramètre ScanState de la méthode Scanf. Comme le montre le code suivant : 🎜rrreee🎜Dans le code ci-dessus, nous créons un objet Scanner via la méthode NewScanner du package bufio, et pass La méthode Split personnalise le séparateur. Dans la fonction délimiteur, nous utilisons la virgule comme délimiteur pour analyser la chaîne d'entrée et la stocker dans les variables a et b. 🎜

Résumé

🎜Grâce à l'introduction de cet article, nous avons découvert la syntaxe de base et les caractéristiques de la méthode Scan et comment implémenter la saisie dans la console. Il convient de noter que la méthode Scan ne lit pas le caractère de nouvelle ligne n dans l'entrée lors du traitement de l'entrée. De plus, la méthode Scanf prend en charge les délimiteurs personnalisés et les entrées formatées, qui peuvent gérer les entrées de la console de manière plus flexible. 🎜

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