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

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

輸入字符串而不是整數時,停止控制臺多次打印相同的消息

輸入字符串而不是整數時,停止控制臺多次打印相同的消息

Go
繁星點點滴滴 2022-05-23 17:22:53
在我的 CLI 程序中,我有這個功能,用戶可以告訴我他們想要多少特定產品的項目。因此,此輸入應為整數。我目前遇到一個問題,如果他們輸入一個字符串,它會出錯,expected an integer但隨后還會再次打印多次而不是一次。例子:How many Fruit Tea would you like to buy? qweexpected integerHow many Fruit Tea would you like to buy? expected integerHow many Fruit Tea would you like to buy? expected integerHow many Fruit Tea would you like to buy?下面是處理此功能的代碼for {    fmt.Printf("How many %v would you like to buy? ", product.Name)    _, err := fmt.Scan(&response)    if err != nil {        fmt.Println(err)        continue    }    if ok, err := validResponse(response); ok {        break    } else {        fmt.Println(err)        continue    }}在這個循環中我必須改變什么,所以它只重復一次問題?
查看完整描述

1 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

如果可以,將responsefrom的類型切換為int,然后使用包(例如)string解析輸入字符串。我懷疑正在嘗試將您輸入的每個字符作為單獨的 int 讀取,每次都失敗,并且每次都運行循環,直到所有字符都被消耗完。strconvstrconv.Atoi()Scan


例如


    for {

        var response string

        fmt.Printf("How many %v would you like to buy? ", product.Name)

        _, err := fmt.Scanln(&response)

        if err != nil { // probably don't need to check err from Scan()

            fmt.Println(err)

            continue

        }

        num, err := strconv.Atoi(response)

        if err != nil {

            fmt.Println("Enter an integer.")

            continue

        }


        if ok, err := validResponse(num); ok && err==nil {

            break

        } else {

            fmt.Println(err)

            continue

        }

    }


查看完整回答
反對 回復 2022-05-23
  • 1 回答
  • 0 關注
  • 95 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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