为什么在Go中使用:= with fmt.Scanf总是返回1?

Jam*_*mes -5 parsing scanf go

我为什么用:

var n int
a, _ := fmt.Scanf("%d",&n)
Run Code Online (Sandbox Code Playgroud)

然后a == 1,n通过输入改变了它的值.

icz*_*cza 7

fmt.Scanf() 返回成功扫描的项目数:

Scanf扫描从标准输入读取的文本,将连续的空格分隔值存储到由格式确定的连续参数中.它返回成功扫描的项目数.如果这小于参数的数量,则错误将报告原因.

因此,如果您的输入是适合的有效整数int,fmt.Scanf()将成功解析并存储它n,因此它将返回1.

如果您输入的数字无效(例如string"a"),扫描将不会成功,因此0将返回非nil错误,如下例所示:

var n int
a, err := fmt.Sscanf("a", "%d", &n)
fmt.Println(a, err)
Run Code Online (Sandbox Code Playgroud)

哪些输出(在Go Playground上试试):

0 expected integer
Run Code Online (Sandbox Code Playgroud)