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



我是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,而是始终将整行读取到字符串中并解析字符串。(

最新更新