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)