我希望在按下時分配一個默認值Enter而不給出一個。
根據我的經驗, Go Playground不處理 fmt.Scan 輸入,所以我在這里參考代碼:(
如果可能,請告訴我如何處理!)
package main
import (
"fmt"
"time"
)
func main() {
t := 0
fmt.Print("seconds? ")
fmt.Scan(&t)
time.Sleep(time.Duration(t) * time.Second)
fmt.Println("in", t)
}
我已經初始化了 to 的值,t但是0當我按下Enter而不給出值時,程式會等待直到我給出一些值。我對錯誤檢查不感興趣(如果可能的話)。我只想讓代碼接受一次Enter按下,如0 Enter.
uj5u.com熱心網友回復:
只需使用fmt.Scanln()而不是fmt.Scan():
fmt.Scanln(&t)
引自fmt.Scanln():
Scanln 類似于 Scan,但在換行處停止掃描,并且在最后一項之后必須有換行符或 EOF。
另一方面,fmt.Scan()不會停在換行符處,而是:
Scan 掃描從標準輸入讀取的文本,將連續的空格分隔值存盤到連續的引數中。換行符算作空格。
一般來說,我建議使用bufio.Scanner逐行讀取輸入,并對這些行做任何你想做的事情(檢查它是否為空,或者按照你想要的方式決議它)。bufio.NewScanner()允許您使用(預定義的)字串作為源(結合strings.NewReader()– 以便于測驗)或者os.Stdin如果您想讀取用戶輸入則通過。
uj5u.com熱心網友回復:
您可以使用bufio.Reader
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
"time"
)
func main() {
var t int
reader := bufio.NewReader(os.Stdin)
fmt.Print("seconds? ")
for {
tStr, err := reader.ReadString('\n')
tStr = strings.TrimSpace(tStr)
t, err = strconv.Atoi(tStr)
if err != nil {
fmt.Println("invalid input, please write a number")
continue
}
break
}
time.Sleep(time.Duration(t) * time.Second)
fmt.Println("in", t)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/447722.html
上一篇:您可以等待bwmarrin/discordgo的用戶回應訊息嗎?
下一篇:一對多關聯從一張表中獲取資料
