Иди, запусти программу правильно на Linux, но на Windows нет - PullRequest
0 голосов
/ 10 ноября 2018

Я сейчас учусь Го Ланг. Опробовать его на разных платформах: Linux, Windows Когда я запускаю код в Linux, он работает отлично, но когда я пробую эту программу в Windows, он не работает.

Это просто простой калькулятор cmd, который позволяет выполнять простые операции, такие как добавление числа, умножение, например. Он не обрабатывает неправильный ввод, как символы. Это моя первая программа для принятия Go синтаксис

Что не работает:

  1. Парсинг int
  2. Сравнение ввода

Код:

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

Я что-то не так делаю или это не плохо?

1 Ответ

0 голосов
/ 10 ноября 2018

Спасибо за помощь от @ zerkms.

Ответ:

input = strings.Replace(input, "\r", "", -1)
input = strings.Replace(input, "\n", "", -1)

Теперь он будет работать как на Windows, так и на Linux

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...