这是非常不寻常的:给定相同的输入,Go 会随机表现不同。package mainimport "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>"有时得到:aagood随机(大约一半的时间)做同样的事情会产生:atbadWindows 7 上的安装是 go1.3.3.windows-amd64.msi 知道这里发生了什么吗?
2 回答
隔江千里
TA贡献1906条经验 获得超10个赞
以防万一这是一个 eol(行尾)问题,请尝试:
fmt.Scanf("%s\r\n", &i)
这在“我如何fmt.Scanf
在 Go 中使用”中提到:
这是因为不同的行尾。
Windows 使用回车和换行('\r\n
')作为行尾。
Unix 使用换行符('\n
')
catspeake
TA贡献1111条经验 获得超0个赞
我无法重现您的错误。
不要忽略错误。例如,
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
- 2 回答
- 0 关注
- 193 浏览
添加回答
举报
0/150
提交
取消