首頁  >  文章  >  後端開發  >  在 go 中列印使用者輸入的字串 n 次

在 go 中列印使用者輸入的字串 n 次

WBOY
WBOY轉載
2024-02-06 08:00:07451瀏覽

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

問題內容

我是新手,我只想列印使用者輸入的字串 n 次,但它只是列印空格 n 次。這是我的程式碼

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

有辦法解決這個問題嗎?謝謝。


正確答案


檢視scanf 文件

#

與您的問題最相關的兩點是:

  • 空格分隔值
  • 輸入中的換行符號必須與格式中的換行符號相符

因此,如果您按原樣運行應用程序,然後輸入 20 foo 並按 Enter 鍵,您將獲得預期的輸出(foo 列印 20 次)。但是,如果您輸入 20 然後按 Enter 鍵,您將獲得 20 個空白行;看看為什麼讓我們運行:

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

這會因 panic: Unexpected newline 而出現恐慌,因為根據規範,「輸入中的換行符號必須與格式中的換行符相符」。假設您希望在每次輸入後按 Enter 鍵,則可以使用 fmt.Scanf("%d\n", &n)。但是,正如您在評論中提到的,如果您使用fmt.Scanf("%s\n", &s) 並輸入包含空格的字串,那麼您只會得到第一個(因為scanf 使用空格作為分隔符號)。

如果您想從 stdin 取得整行,那麼這個問題的答案提供了一些選項,例如

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

以上是在 go 中列印使用者輸入的字串 n 次的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除