Я сейчас учусь Го Ланг. Опробовать его на разных платформах: Linux, Windows
Когда я запускаю код в Linux, он работает отлично, но когда я пробую эту программу в Windows, он не работает.
Это просто простой калькулятор cmd, который позволяет выполнять простые операции, такие как добавление числа, умножение, например. Он не обрабатывает неправильный ввод, как символы. Это моя первая программа для принятия Go синтаксис
Что не работает:
- Парсинг int
- Сравнение ввода
Код:
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('\n')
input = strings.Replace(input, "\n", "", -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('\n')
input = strings.Replace(input, "\n", "", -1)
number, _ := strconv.Atoi(input)
*operation = number
}
func getNumber(reader bufio.Reader) float64 {
input, _ := reader.ReadString('\n')
input = strings.Replace(input, "\n", "", -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)
}
Результаты:
Linux
Windows
Я что-то не так делаю или это не плохо?