关于fmt.Scan()和fmt.Scanf()的区别

lovegolang · · 17077 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

有人问道: 我刚开始接触go语言,在根据书写二分法的时候发现个问题。 虽然解决了,但搞不清楚原因是为什么。 代码如下: package main import "fmt" func main() { min, max := 0, 100 fmt.Printf("%d--%d", min, max) for min < max { i := (min + max) / 2 fmt.Printf("<=%d(y or n) ", i) var s string fmt.Scanf("%s", &s) if s != "" && s[0] == 'y' { max = i } else { min = i + 1 } } fmt.Printf("%d\n", max) } 运行结果: 0--100 <=50(y or n) 输入 n <=75(y or n) <=88(y or n) 这里会连续两次执行 fmt.Printf("<=%d(y or n) ", i) 即 fmt.Scanf("%s", &s)未被执行,或者说默认输入了某项内容,经过试验是默认了""空字符串。 我将fmt.Scanf("%s", &s)改成fmt.Scan(&s)后,这个错误没有再发生。 我对fmt.Scan()和fmt.Scanf()的用法就有了疑问,哪位能详细解释下!!!!! 感谢!!!!!!!!

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

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

17077 次点击  
加入收藏 微博
8 回复  |  直到 2015-12-14 11:27:06
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传