Программа перестает работать после того как пользователь ввел пример

Рейтинг: -1Ответов: 1Опубликовано: 08.04.2023

Пожалуйста исправите программу. Программа калькулятор. На golang

Пользователь вводит число 1 затем символ и число 2 после чего числа 1 и 2 конвертируются из строк в целочисленные данные затем происходит вычисление с оператором который пользователь ввел и выводится результат

Программа перестает работать после того как пользователь ввел пример. Например: 10 + 34

package main

import (
    "fmt"
    "log"
    "strconv"
)

func main() {
    fnum := "0"
    snum := "0"

    var symbol string
    var result int

    fmt.Println("\nHello user_name")
    fmt.Println("Please enter first number and symbol(+,-,*,/) and yet number")
    fmt.Scanf("%s", &fnum, &snum, &symbol)

    res1, err := strconv.Atoi(fnum)
    if err != nil {
        log.Fatal(err)
    }

    res2, err := strconv.Atoi(snum)
    if err != nil {
        log.Fatal(err)
    }

    switch symbol {
    case "+":
        result = res1 + res2
        fmt.Print(result)
    case "-":
        result = res1 - res2
        fmt.Print(result)
    case "*":
        result = res1 * res2
        fmt.Print(result)
    case "/":
        result = res1 / res2
        fmt.Print(result)
    }
}

Ответы

▲ 1Принят

Программа не перестаёт работать. Она отрабатывает но не находит в switch нужную ветку по причине того, что вы неправильно указали количество и порядок параметров в Scanf. Простейший путь это исправить - fmt.Scanf("%s%s%s", &fnum, &symbol, &snum). А лучше слегка оптимизировать код и возложить на Scanf ответственность о сообщении об ошибках:

var (
    res1   int
    res2   int
    result int
    symbol string
)
    
fmt.Println("\nHello user_name")
fmt.Println("Please enter first number and symbol(+,-,*,/) and yet number")
_, err := fmt.Scanf("%d%s%d", &res1, &symbol, &res2)
if err != nil {
    log.Fatal(err)
}
    
switch symbol {
       ...
}