为了账号安全,请及时绑定邮箱和手机立即绑定

按 Enter 时分配的默认值

按 Enter 时分配的默认值

Go
牧羊人nacy 2022-11-23 19:22:23
我想要在按下时分配一个默认值Enter而不给出一个。根据我的经验, Go Playground不处理 fmt.Scan 输入,所以我在这里引用代码:(如果可能,请告诉我怎么做!)package mainimport (    "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.
查看完整描述

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如果您想读取用户输入则通过。


查看完整回答
反对 回复 2022-11-23
?
ibeautiful

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)

}


查看完整回答
反对 回复 2022-11-23
  • 2 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号