猿问

按 Enter 时分配的默认值

我想要在按下时分配一个默认值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.


牧羊人nacy
浏览 137回答 2
2回答

千巷猫影

只需使用fmt.Scanln()而不是fmt.Scan():fmt.Scanln(&t)引用自fmt.Scanln():Scanln 与 Scan 类似,但在换行处停止扫描,并且在最后一项之后必须有换行符或 EOF。另一方面,fmt.Scan()不会停在换行符处,而是:Scan 扫描从标准输入读取的文本,将连续的空格分隔值存储到连续的参数中。换行算作空格。一般来说,我建议使用bufio.Scanner按行读取输入,并用这些行做任何你想做的事情(检查它是否为空,或者按照你想要的方式解析它)。bufio.NewScanner()允许您使用(预定义的)字符串作为源(结合strings.NewReader()– 以便于测试)或者os.Stdin如果您想读取用户输入则通过。

ibeautiful

您可以使用bufio.Readerpackage mainimport (    "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)}
随时随地看视频慕课网APP

相关分类

Go
我要回答