Heim > Backend-Entwicklung > Golang > So verwenden Sie die Scan-Methode, um Konsoleneingaben zu implementieren

So verwenden Sie die Scan-Methode, um Konsoleneingaben zu implementieren

PHPz
Freigeben: 2023-04-11 10:07:04
Original
933 Leute haben es durchsucht

In der Go-Sprache können Sie die Methode scan verwenden, um Daten aus der Standardeingabe zu lesen. Die Methode scan kann jede Art von Daten lesen, einschließlich Zeichenfolgen, Zahlen, boolesche Werte usw. In diesem Artikel wird detailliert beschrieben, wie Sie die Methode scan verwenden, um Konsoleneingaben zu implementieren. scan方法从标准输入中读取数据。scan方法可以读取任意类型的数据,包括字符串、数字、布尔值等等。本文将详细介绍如何使用scan方法实现控制台输入。

基本语法

scan方法的基本语法如下:

func Scan(a ...interface{}) (n int, err error)
Nach dem Login kopieren

从输入中读取数据,并将其存储到指定的参数中。参数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})
}
Nach dem Login kopieren

通过上面的代码,我们可以看到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})
}
Nach dem Login kopieren

输入字符串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)
}
Nach dem Login kopieren
Nach dem Login kopieren

输入字符串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)
}
Nach dem Login kopieren
Nach dem Login kopieren

输入字符串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})
}
Nach dem Login kopieren

上面的代码中,定义的格式化字符串"%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})
}
Nach dem Login kopieren

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

总结

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

Grundsyntax

Die Grundsyntax der Methode scan lautet wie folgt: 🎜rrreee🎜Daten aus der Eingabe lesen und in den angegebenen Parametern speichern. Der Parameter a stellt die Daten dar, die gelesen werden müssen. Es können beliebig viele Parameter übergeben werden. Jeder Parameter ist ein Zeigertyp, der zum Speichern der Eingabedaten verwendet wird. Der Rückgabewert n gibt die Anzahl der erfolgreich gelesenen Parameter an und der Rückgabewert err weist auf mögliche Fehler hin. 🎜🎜Das Folgende ist ein einfaches Beispiel, das zeigt, wie man zwei Ganzzahlen von der Konsole liest: 🎜rrreee🎜Durch den obigen Code können wir die grundlegende Verwendung der Scan-Methode sehen. Beim Ausführen des obigen Codes fordert das Programm den Benutzer auf, zwei Ganzzahlen einzugeben. Nachdem die Benutzereingabe abgeschlossen ist, speichert das Programm die beiden Ganzzahlen in den Variablen a und b und diese beiden Ganzzahlen ausgeben. 🎜

Eigenschaften der Scan

🎜Scan-Methode hat die folgenden Funktionen: 🎜

1. Leerzeichen ignorieren

🎜Scan-Methode in When Beim Lesen von Daten werden Leerzeichen zwischen den Daten automatisch ignoriert. Wie im folgenden Code gezeigt: 🎜rrreee🎜Geben Sie die Zeichenfolge hello world go ein. Das Programm ignoriert automatisch die Leerzeichen zwischen den Zeichenfolgen und gibt diese drei Zeichenfolgen aus. 🎜

2. Warten auf Wagenrücklauf

🎜Wenn die Methode Scan Daten liest, wartet sie darauf, dass der Benutzer das Wagenrücklaufzeichen n eingibt. zeigt an, dass die Eingabe abgeschlossen ist. Wenn der Benutzer kein Wagenrücklaufzeichen eingibt, wartet das Programm auf eine Benutzereingabe. Wie im folgenden Code gezeigt: 🎜rrreee🎜Nach der Eingabe der Zeichenfolge hello gibt das Programm das Ergebnis nicht sofort aus, sondern wartet darauf, dass der Benutzer das Wagenrücklaufzeichen neingibt >. Ergebnisse ausgeben. 🎜

3. Das Zeilenumbruchzeichen wird nicht gelesen

🎜Die Methode Scan liest beim Lesen von Daten das Zeilenumbruchzeichen n nicht. Wenn wir beispielsweise eine Zeichenfolge mit der Methode Scan lesen, wird das Zeilenumbruchzeichen n in der Eingabezeichenfolge nicht gelesen. Wie im folgenden Code gezeigt: 🎜rrreee🎜Geben Sie die Zeichenfolge hellonworld ein. Das Programm liest nur die Zeichenfolge hello und nicht das Zeilenumbruchzeichen in der Zeichenfolge n. 🎜

Eingehende Analyse

🎜Die Implementierung der Methode Scan basiert auf der Funktion Scanf des Pakets fmt . Die Scanf-Methode verfügt über die folgenden Funktionen: 🎜

1. Formatierte Eingabe

🎜Die Scanf-Methode unterstützt formatierte Eingaben. Sie können den zu lesenden Datentyp über einen Formatstring angeben. Beispielsweise können wir eine Ganzzahl und eine Zeichenfolge über die folgende Formatzeichenfolge lesen: 🎜rrreee🎜Im obigen Code bedeutet die definierte Formatzeichenfolge "%d %s", dass zuerst eine Ganzzahl gelesen und dann gelesen wird eine durch Leerzeichen getrennte Zeichenfolge. 🎜

2. Benutzerdefiniertes Trennzeichen

🎜Scanf-Methode unterstützt benutzerdefiniertes Trennzeichen. Standardmäßig verwendet die Methode Scanf Leerzeichen als Trennzeichen. Sie können das Trennzeichen über den Parameter ScanState der Methode Scanf anpassen. Wie im folgenden Code gezeigt: 🎜rrreee🎜Im obigen Code erstellen wir ein Scanner-Objekt über die NewScanner-Methode des bufio-Pakets. und übergeben Sie die Methode Split, um das Trennzeichen anzupassen. In der Trennzeichenfunktion verwenden wir Komma als Trennzeichen, um die Eingabezeichenfolge zu analysieren und in den Variablen a und b zu speichern. 🎜

Zusammenfassung

🎜Durch die Einleitung dieses Artikels haben wir etwas über die grundlegende Syntax und Eigenschaften der Methode Scan und die Implementierung von Konsoleneingaben gelernt. Es ist zu beachten, dass die Methode Scan bei der Verarbeitung der Eingabe das Zeilenumbruchzeichen n nicht in die Eingabe einliest. Darüber hinaus unterstützt die Methode Scanf benutzerdefinierte Trennzeichen und formatierte Eingaben, wodurch Konsoleneingaben flexibler verarbeitet werden können. 🎜

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Scan-Methode, um Konsoleneingaben zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage