可以在Linux上正常运行程序,但不能在Windows上运行
问题描述:
I am currently learning Go lang. Trying it on different platforms: Linux, Windows When I run code on Linux it runs perfectly, but when I try this program on Windows it doesn't work.
Its just simple cmd calculator which allows simple operations like add number, multiply eg. Its not handling wrong input like characters. It's my first program for adoption Go syntax
What doesn't work:
- Parsing int
- Comparing input
Code:
package main
import (
"bufio"
"fmt"
"math"
"os"
"strconv"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var operation int
var firstNumber float64
var secondNumber float64
fmt.Println("Simple cmd calculator")
repeat := true
for repeat {
fmt.Println("Enter number 1: ")
firstNumber = getNumber(*reader)
fmt.Println("Enter number 2: ")
secondNumber = getNumber(*reader)
fmt.Println()
selectOperation(*reader, &operation)
fmt.Print("You result is: ")
switch operation {
case 1:
fmt.Println(add(firstNumber, secondNumber))
case 2:
fmt.Println(subtract(firstNumber, secondNumber))
case 3:
fmt.Println(multiply(firstNumber, secondNumber))
case 4:
fmt.Println(divide(firstNumber, secondNumber))
}
fmt.Println("Do you want to continue? [Y/n]")
input, _ := reader.ReadString('
')
input = strings.Replace(input, "
", "", -1)
if !(input == "Y" || input == "y") {
repeat = false
}
}
}
func selectOperation(reader bufio.Reader, operation *int) {
fmt.Println("1. Add")
fmt.Println("2. Subtract")
fmt.Println("3. Multiply")
fmt.Println("4. Divide")
fmt.Print("Select operation: ")
input, _ := reader.ReadString('
')
input = strings.Replace(input, "
", "", -1)
number, _ := strconv.Atoi(input)
*operation = number
}
func getNumber(reader bufio.Reader) float64 {
input, _ := reader.ReadString('
')
input = strings.Replace(input, "
", "", -1)
convertedNumber, _ := strconv.ParseFloat(input, 64)
return convertedNumber
}
func add(a float64, b float64) float64 {
return (math.Round((a+b)*100) / 100)
}
func subtract(a float64, b float64) float64 {
return (math.Round((a-b)*100) / 100)
}
func multiply(a float64, b float64) float64 {
return (math.Round(a*b*100) / 100)
}
func divide(a float64, b float64) float64 {
return (math.Round(a/b*100) / 100)
}
Results:
Am I doing something wrong or it's not my bad?
答
Thanks for help from @zerkms.
Answer is:
input = strings.Replace(input, "", "", -1)
input = strings.Replace(input, "
", "", -1)
Now it will work properly both on windows and linux