Gibt die vom Benutzer eingegebene Zeichenfolge n-mal in go aus

WBOY
Freigeben: 2024-02-06 08:00:07
nach vorne
500 Leute haben es durchsucht

在 go 中打印用户输入的字符串 n 次

Frageninhalt

Ich bin ein Neuling und möchte die vom Benutzer eingegebene Zeichenfolge nur n-mal drucken, aber es werden nur n-mal Leerzeichen gedruckt. Das ist mein Code

package main

import (
    "fmt"
)

func main() {
    var n int
    var s string
    fmt.Scanf("%d", &n)
    fmt.Scanf("%s", &s)

    for i := 0; i < n; i++ {
        fmt.Printf("%s\n", s)
    }
}
Nach dem Login kopieren

Gibt es eine Möglichkeit, dieses Problem zu lösen? Danke.


Richtige Antwort


Ansicht scanfDokumente

Die zwei relevantesten Punkte zu Ihrer Frage sind:

  • Leerzeichengetrennte Werte
  • Neue Zeilen in der Eingabe müssen mit neuen Zeilen im Format übereinstimmen

Wenn Sie also die Anwendung unverändert ausführen, 20 foo 并按 Enter 键,您将获得预期的输出(foo 打印 20 次)。但是,如果您输入 20 eingeben und die Eingabetaste drücken, erhalten Sie 20 leere Zeilen. Sehen Sie, warum wir Folgendes ausführen:

var n int
var s string
fmt.Scanf("%d", &n)
_, err := fmt.Scanf("%s", &s)
if err != nil {
    panic(err)
}
Nach dem Login kopieren

Dies führt zu einer Panik mit panic: Unexpected newline, da gemäß der Spezifikation „Zeilenumbrüche in der Eingabe mit Zeilenumbrüchen im Format übereinstimmen müssen“. Angenommen, Sie möchten nach jeder Eingabe die Eingabetaste drücken, können Sie fmt.Scanf("%dn", &n) verwenden. Wenn Sie jedoch, wie Sie in Ihrem Kommentar erwähnt haben, fmt.Scanf("%sn", &s) verwenden und eine Zeichenfolge mit Leerzeichen eingeben, erhalten Sie nur das erste Bit (weil panic: Unexpected newline 而出现恐慌,因为根据规范,“输入中的换行符必须与格式中的换行符匹配”。假设您希望在每次输入后按 Enter 键,则可以使用 fmt.Scanf("%dn", &n)。但是,正如您在评论中提到的,如果您使用 fmt.Scanf("%sn", &s) 并输入包含空格的字符串,那么您只会得到第一位(因为 scanf Leerzeichen verwenden als Trennzeichen). < /p>

Wenn Sie die gesamte Zeile von stdin erhalten möchten, bietet die Antwort auf diese Frage einige Optionen wie

func main() {
    var n int
    var s string
    fmt.Println("How many times? ")
    fmt.Scanf("%d\n", &n)
    fmt.Println("What to output? ")
    reader := bufio.NewReader(os.Stdin)
    s, _ = reader.ReadString('\n')

    for i := 0; i < n; i++ {
        fmt.Printf("%s", s)
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonGibt die vom Benutzer eingegebene Zeichenfolge n-mal in go aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
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