Heim  >  Artikel  >  Backend-Entwicklung  >  Gibt die vom Benutzer eingegebene Zeichenfolge n-mal in go aus

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

WBOY
WBOYnach vorne
2024-02-06 08:00:07496Durchsuche

在 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)
    }
}

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)
}

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).

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)
    }
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen