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

时间:2017-09-29 06:07:30

标签: parsing go scanf

为什么我使用:

var n int
a, _ := fmt.Scanf("%d",&n)

然后a == 1n已通过输入更改了其值。

1 个答案:

答案 0 :(得分: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)

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

0 expected integer