GO语言菜鸟-问题

xaingyangflower · 2017-06-23 02:42:00 · 1923 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-06-23 02:42:00 的主题,其中的信息可能已经有所发展或是发生改变。

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:

请大神指点


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1923 次点击  
加入收藏 微博
5 回复  |  直到 2017-06-26 04:58:01
Hubery
Hubery · #1 · 8年之前

能发个完整点的demo吗?发play.golang.org

polaris
polaris · #2 · 8年之前

新手也需要好好提问:

  1. 代码不完整;
  2. 格式乱,markdown 基本语法得懂点,即使不懂,发布那里有教程,还提示了发布前预览下;
  3. 节点也不好好选;
polaris
polaris · #3 · 8年之前
HuberyHubery #1 回复

能发个完整点的demo吗?发play.golang.org

如果 pay.golang.org 因为翻墙用不了,可以使用本站提供的 wide

Cynhard
Cynhard · #4 · 8年之前

遇到问题先查文档是一个好习惯。仔细看看 go doc 对 fmt.Sscan 是怎么描述的:

func Sscan(str string, a ...interface{}) (n int, err error)<br> Sscan scans the argument string, storing successive space-separated values into successive arguments. Newlines count as space. It returns the number of items successfully scanned. If that is less than the number of arguments, err will report why.

在编译器看来,下面的语句表示:将 line 中(用空白分割的)第一个 token 赋给 "%f %f",(后面省略)。

if _,err:= fmt.Sscan(line, "%f %f ",&radius,&θ);  err != nil {

"%f %f"是一个字符串常量,而不是变量的指针,运行时无法给它赋值。因此报下面的错:

type not a pointer: string

意思是我想要一个指针,你却给我了一个字符串。我只能给你一个 panic 。

Cynhard
Cynhard · #5 · 8年之前
CynhardCynhard #4 回复

遇到问题先查文档是一个好习惯。仔细看看 go doc 对 fmt.Sscan 是怎么描述的: > func Sscan(str string, a ...interface{}) (n int, err error)
> Sscan scans the argument string, storing successive space-separated values into successive arguments. Newlines count as space. It returns the number of items successfully scanned. If that is less than the number of arguments, err will report why. 在编译器看来,下面的语句表示:将 line 中(用空白分割的)第一个 token 赋给 "%f %f",(后面省略)。 ``` if _,err:= fmt.Sscan(line, "%f %f ",&radius,&θ); err != nil { ``` "%f %f"是一个字符串常量,而不是变量的指针,运行时无法给它赋值。因此报下面的错: ``` type not a pointer: string ``` 意思是我想要一个指针,你却给我了一个字符串。我只能给你一个 panic 。

也许你想要用的是 fmt.Sscanf

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传