Search code examples
goexecution

Different execution under Windows and Linux with Go


I created a very small game of number guessing in Go. The thing is, it executes differently under Windows and under Linux. By executing it on Ubuntu for example, everything works just fine. But when I try to start it under Windows, it compiles just fine but during execution when I enter something (for example 5) it prints me twice "Smaller than random num"or "Bigger than random num". I have no idea why it happens.

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
}

Solution

  • Newlines are different in Linux and Windows, and thus your program behaves differently.

    See this issue: https://github.com/golang/go/issues/5391

    To fix this, you can replace your Scanf with this (note the "\n" at the end):

    fmt.Scanf("%v\n",&number)