登录
首页 >  Golang >  Go问答

默认值设定为按下"Enter"键时确认

来源:stackoverflow

时间:2024-03-11 13:00:28 435浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《默认值设定为按下"Enter"键时确认》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我希望在按 enter 时分配一个默认值,而不给出一个。

根据我的经验,go 演示无法处理 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)
}

我已将 t 的值初始化为 0,但是当我按 enter 而不给出值时,程序会等待,直到我给出一些值。我对错误检查不感兴趣(如果可能的话)。我只想让代码接受一次 enter 按下,如 0 enter


正确答案


只需使用 fmt.Scanln() 而不是 fmt.Scan()

fmt.scanln(&t)

引用fmt.scanln()

scanln 与 scan 类似,但在换行符处停止扫描,并且在最后一项之后必须有换行符或 eof。

另一方面,fmt.scan() 不会在换行符处停止,而是:

scan 扫描从标准输入读取的文本,将连续的空格分隔值存储到连续的参数中。 换行符算作空格。

一般来说,我建议使用 bufio.Scanner 按行读取输入,并对这些行执行任何您想要的操作(检查其是否为空,或按照您想要的方式解析它)。 bufio.NewScanner() 允许您使用(预定义的)字符串作为源(与 strings.NewReader() 组合,以便于测试),或者如果您想读取用户输入,则传递 os.stdin

您可以使用 bufio.reader

p>

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)
}

以上就是《默认值设定为按下"Enter"键时确认》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>