我是新手,我只想列印使用者輸入的字串 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中文網其他相關文章!