Go 在 Windows 和 Linux 下的不同执行
Different execution under Windows and Linux with Go
我创建了一个非常小的围棋猜数游戏。问题是,它在 Windows 和 Linux 下的执行方式不同。例如,通过在 Ubuntu 上执行它,一切正常。但是当我尝试在 Windows 下启动它时,它编译得很好,但是在执行期间,当我输入某些内容(例如 5)时,它会打印两次 "Smaller than random num" 或 "Bigger than random num"。我不知道为什么会这样。
package main
import (
"fmt"
"math/rand"
"time"
)
func main () {
var number int //declaration
var tries int = 0
random_number := random(1, 9) //gets random number
for ; ;tries++ {
//fmt.Printf("Enter your prediction: ")
fmt.Scanf("%v",&number)
if number == random_number {
break;
} else if number<random_number{
fmt.Printf("Smaller than random num\n")
} else {
fmt.Printf("Bigger than random num\n")
}
}
fmt.Printf("You guessed correctly in %v tries",tries)
}
func random(min, max int) int {
rand.Seed(time.Now().Unix())
return rand.Intn(max - min) + min
}
换行符在 Linux 和 Windows 中不同,因此您的程序表现不同。
看到这个问题:https://github.com/golang/go/issues/5391
要解决这个问题,您可以用这个替换 Scanf(注意末尾的“\n”):
fmt.Scanf("%v\n",&number)
我创建了一个非常小的围棋猜数游戏。问题是,它在 Windows 和 Linux 下的执行方式不同。例如,通过在 Ubuntu 上执行它,一切正常。但是当我尝试在 Windows 下启动它时,它编译得很好,但是在执行期间,当我输入某些内容(例如 5)时,它会打印两次 "Smaller than random num" 或 "Bigger than random num"。我不知道为什么会这样。
package main
import (
"fmt"
"math/rand"
"time"
)
func main () {
var number int //declaration
var tries int = 0
random_number := random(1, 9) //gets random number
for ; ;tries++ {
//fmt.Printf("Enter your prediction: ")
fmt.Scanf("%v",&number)
if number == random_number {
break;
} else if number<random_number{
fmt.Printf("Smaller than random num\n")
} else {
fmt.Printf("Bigger than random num\n")
}
}
fmt.Printf("You guessed correctly in %v tries",tries)
}
func random(min, max int) int {
rand.Seed(time.Now().Unix())
return rand.Intn(max - min) + min
}
换行符在 Linux 和 Windows 中不同,因此您的程序表现不同。
看到这个问题:https://github.com/golang/go/issues/5391
要解决这个问题,您可以用这个替换 Scanf(注意末尾的“\n”):
fmt.Scanf("%v\n",&number)