输入字符串而不是整数时,停止控制台多次打印相同的消息

在我的 CLI 程序中,我有这个功能,用户可以告诉我他们想要多少特定产品的项目。因此,此输入应为整数。


我目前遇到一个问题,如果他们输入一个字符串,它会出错,expected an integer但随后还会再次打印多次而不是一次。


例子:


How many Fruit Tea would you like to buy? qwe

expected integer

How many Fruit Tea would you like to buy? expected integer

How many Fruit Tea would you like to buy? expected integer

How 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

    }

}

在这个循环中我必须改变什么,所以它只重复一次问题?


繁星点点滴滴
浏览 68回答 1
1回答

千巷猫影

如果可以,将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        }    }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go