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 关注
- 136 浏览
添加回答
举报