亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

按 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 關注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號