Maison > développement back-end > Golang > le corps du texte

Imprimer la chaîne saisie par l'utilisateur n fois à la fois

WBOY
Libérer: 2024-02-06 08:00:07
avant
501 Les gens l'ont consulté

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

Contenu de la question

Je suis un débutant et je veux juste imprimer la chaîne saisie par l'utilisateur n fois, mais cela imprime simplement les espaces n fois. C'est mon 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)
    }
}
Copier après la connexion

Existe-t-il un moyen de résoudre ce problème ? Merci.


Réponse correcte


Voir scanf Documents

Les deux points les plus pertinents par rapport à votre question sont :

  • Valeurs séparées par des espaces
  • Les nouvelles lignes en entrée doivent correspondre aux nouvelles lignes au format

Donc, si vous exécutez l'application telle quelle et tapez 20 foo 并按 Enter 键,您将获得预期的输出(foo 打印 20 次)。但是,如果您输入 20 et appuyez sur Entrée, vous obtiendrez 20 lignes vides. Voyez pourquoi exécutons :

 ;
var n int
var s string
fmt.Scanf("%d", &n)
_, err := fmt.Scanf("%s", &s)
if err != nil {
    panic(err)
}
Copier après la connexion

Cela va paniquer avec panique : nouvelle ligne inattendue car selon la spécification "les nouvelles lignes dans l'entrée doivent correspondre aux nouvelles lignes dans le format". En supposant que vous souhaitiez appuyer sur Entrée après chaque entrée, vous pouvez utiliser fmt.Scanf("%dn", &n). Cependant, comme vous l'avez mentionné dans votre commentaire, si vous utilisez fmt.Scanf("%sn", &s) et entrez une chaîne contenant des espaces, vous n'obtiendrez que le premier bit (car panic: Unexpected newline 而出现恐慌,因为根据规范,“输入中的换行符必须与格式中的换行符匹配”。假设您希望在每次输入后按 Enter 键,则可以使用 fmt.Scanf("%dn", &n)。但是,正如您在评论中提到的,如果您使用 fmt.Scanf("%sn", &s) 并输入包含空格的字符串,那么您只会得到第一位(因为 scanf Utilisez les espaces comme séparateurs). < /p>

Si vous souhaitez obtenir la ligne entière de stdin alors la réponse à cette question propose quelques options comme

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

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!

Étiquettes associées:
source:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal