这是非常不寻常的:给定相同的输入,Go将随机地表现不同。
package main
import "fmt"
func main() {
var i string
fmt.Scanf("%s\n", &i)
fmt.Println(i)
switch i {
case "a":
fmt.Println("good")
case "b":
fmt.Println("not good")
default:
fmt.Println("bad")
}
}
在命令提示符下我运行
go run test.go
然后我输入
"a <enter>"
有时会得到:
a
a
good
并且随机(大约一半时间)做同样的事情产生:
a
t
bad
在Windows 7上安装go1.3.3.windows-amd64.msi 知道这里发生了什么吗?
答案 0 :(得分:3)
如果这是一个eol(行尾)问题,请尝试:
fmt.Scanf("%s\r\n", &i)
&#34; How do I use fmt.Scanf
in Go&#34;:
这是因为不同的行结尾 窗口使用回车符和换行符(&#39;
\r\n
&#39;)作为行结尾 Unix使用换行符(&#39;\n
&#39;)
答案 1 :(得分:1)
我无法重现您的错误。
不要忽视错误。例如,
package main
import "fmt"
func main() {
var i string
n, err := fmt.Scanf("%s\n", &i)
if err != nil || n != 1 {
fmt.Println(n, err)
}
fmt.Println(i)
switch i {
case "a":
fmt.Println("good")
case "b":
fmt.Println("not good")
default:
fmt.Println("bad")
}
}
输出:
C:\>go version
go version go1.3.3 windows/amd64
C:\gopath\src\so>go run test.go
a
a
good
C:\gopath\src\so>go run test.go
b
b
not good
C:\gopath\src\so>go run test.go
t
t
bad