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) } }
Existe-t-il un moyen de résoudre ce problème ? Merci.
Voir scanf
Documents
Les deux points les plus pertinents par rapport à votre question sont :
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) }
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) } }
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!