登录
首页 >  Golang >  Go问答

GoLang fmt.Scan 类型错误 跳过下一个 fmt.Scan

来源:stackoverflow

时间:2024-04-03 08:30:36 322浏览 收藏

大家好,今天本人给大家带来文章《GoLang fmt.Scan 类型错误 跳过下一个 fmt.Scan》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

我是 golang 的初学者,这里是教程中的示例代码。

func main() {
    for {
        var name string
        var email string
        var usertickets uint
        // ask user for info
        fmt.println("input your name please")
        fmt.scan(&name)

        fmt.println("input your email please")
        fmt.scan(&email)

        // ask user for number of tickets
        fmt.println("input number of ticket")
        if _, err := fmt.scanln(&usertickets); err != nil {
            fmt.println(err)
        }
    }
}

我发现了一件有趣的事情: 如果我在“输入票数”中输入“-1”。由于 usertickets 是 uint,因此它将引发错误。有了这个错误,它还会在下一个循环中为“请输入您的名字”放置一个“输入/下一行”。 结果看起来像这样

Input your Name please
Test
Input your Email please
Test
Input number of tickect
-1
expected integer
Input your Name please <= this input is skipped
Input your Email please

所以只是想知道为什么会发生这种情况?我该如何解决这个问题(无需将类型从 uint 更改为 int)?


正确答案


所以只是想知道为什么会发生这种情况?

因为-1不能存储在uint中。

如何解决这个问题(无需将类型从 uint 更改为 int)?

你不能。

(正确的做法是不要使用 fmt.Scan,而是始终将整行​​读入字符串并解析该字符串。)

今天关于《GoLang fmt.Scan 类型错误 跳过下一个 fmt.Scan》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

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