這似乎是正確的,但它扼殺在換行。 這樣做的最好方法是什麼?哪一掃描用於讀取字符串中的浮點數?
package main
import (
"fmt"
"strings"
)
func main() {
var z float64
var a []float64
// \n gives an error for Fscanf
s := "3.25 -12.6 33.7 \n 3.47"
in := strings.NewReader(s)
for {
n, err := fmt.Fscanf(in, "%f", &z)
fmt.Println("n", n)
if err != nil {
break
}
a = append(a, z)
}
fmt.Println(a)
}
輸出:
n 1
n 1
n 1
n 0
[3.25 -12.6 33.7]
更新:
見從下面@Atom答案。如果錯誤是EOF,我發現了另一種方法,否則就忽略它。我知道這只是一種黑客攻擊,但我控制了源代碼。
_, err := fmt.Fscanf(in, "%f", &z)
if err == os.EOF { break }
if err != nil { continue }
這很尷尬。我在文檔中看到了這個函數,但不知道要做什麼...... interface {}。然後我找到了一個例子來複制Fscanf和&z作爲參數,我沒有想到回到Fscan。但是,我仍然不知道簽名的功能是什麼。還沒有發現任何可以解釋它的東西。 – telliott99 2012-03-03 22:00:45
包'fmt'的文檔正在解釋'a ... interface {}',其中包含以下語句:「所有要掃描的參數必須是指向基本類型或Scanner接口實現的指針」。 – 2012-03-04 12:29:46