const result = "Polar radius =%.02f θ=%.02f° →Cartesian x = %.02f y =%.02f\n"
func interact(questions chan polar, answers chan cartesian) {
reader := bufio.NewReader(os.Stdin)
fmt.Println(prompt)
for{
fmt.Println("Radius and angle:")
line, err:= reader.ReadString('\n')
if err != nil{
break
}
var radius,θ float64
if _,err:= fmt.Sscan(line, "%f %f ",&radius,&θ); err != nil {
fmt.Println(os.Stderr, "invalid input")
fmt.Println("err=",err)
continue
}
questions <-polar{radius,θ}
coord := <-answers
fmt.Println(result, radius,θ,coord.x,coord.y )
}
fmt.Println()
}
编译执行时,在如下代码报错:
var radius,θ float64
if _,err:= fmt.Sscan(line, "%f %f ",&radius,&θ); err != nil {
fmt.Println(os.Stderr, "invalid input")
fmt.Println("err=",err)
continue
}
错误信息:
&{0xc42000a3a0} invalid input
err= type not a pointer: string
Radius and angle:
请大神指点
有疑问加站长微信联系(非本文作者)

能发个完整点的demo吗?发play.golang.org
新手也需要好好提问:
如果 pay.golang.org 因为翻墙用不了,可以使用本站提供的 wide
遇到问题先查文档是一个好习惯。仔细看看 go doc 对 fmt.Sscan 是怎么描述的:
在编译器看来,下面的语句表示:将 line 中(用空白分割的)第一个 token 赋给 "%f %f",(后面省略)。
"%f %f"是一个字符串常量,而不是变量的指针,运行时无法给它赋值。因此报下面的错:
意思是我想要一个指针,你却给我了一个字符串。我只能给你一个 panic 。
也许你想要用的是 fmt.Sscanf