2 回答

TA貢獻1829條經驗 獲得超7個贊
只需使用fmt.Scanln()
而不是fmt.Scan()
:
fmt.Scanln(&t)
引用自fmt.Scanln()
:
Scanln 與 Scan 類似,但在換行處停止掃描,并且在最后一項之后必須有換行符或 EOF。
另一方面,fmt.Scan()
不會停在換行符處,而是:
Scan 掃描從標準輸入讀取的文本,將連續的空格分隔值存儲到連續的參數中。換行算作空格。
一般來說,我建議使用bufio.Scanner
按行讀取輸入,并用這些行做任何你想做的事情(檢查它是否為空,或者按照你想要的方式解析它)。bufio.NewScanner()
允許您使用(預定義的)字符串作為源(結合strings.NewReader()
– 以便于測試)或者os.Stdin
如果您想讀取用戶輸入則通過。

TA貢獻1993條經驗 獲得超6個贊
您可以使用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)
}
- 2 回答
- 0 關注
- 124 瀏覽
添加回答
舉報