| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- // calculator.go
- // example: calculate 3 + 4 = 7 as input: 3 ENTER 4 ENTER + ENTER --> result = 7,
- package main
- import (
- "fmt"
- "strconv"
- "bufio"
- "os"
- "./stack/stack"
- )
- func main() {
- buf := bufio.NewReader(os.Stdin)
- calc1 := new(stack.Stack)
- fmt.Println("Give a number, an operator (+, -, *, /), or q to stop:")
- for {
- token, err := buf.ReadString('\n')
- if err != nil {
- fmt.Println("Input error !")
- os.Exit(1)
- }
- token = token[0:len(token)-2] // remove "\r\n"
- // fmt.Printf("--%s--\n",token) // debug statement
- switch {
- case token == "q": // stop als invoer = "q"
- fmt.Println("Calculator stopped")
- return
- case token >= "0" && token <= "999999":
- i, _ := strconv.Atoi(token)
- calc1.Push(i)
- case token == "+":
- q := calc1.Pop()
- p := calc1.Pop()
- fmt.Printf("The result of %d %s %d = %d\n", p, token, q, p + q)
- case token == "-":
- q := calc1.Pop()
- p := calc1.Pop()
- fmt.Printf("The result of %d %s %d = %d\n", p, token, q, p - q)
- case token == "*":
- q := calc1.Pop()
- p := calc1.Pop()
- fmt.Printf("The result of %d %s %d = %d\n", p, token, q, p * q)
- case token == "/":
- q := calc1.Pop()
- p := calc1.Pop()
- fmt.Printf("The result of %d %s %d = %d\n", p, token, q, p / q)
- default:
- fmt.Println("No valid input")
- }
- }
- }
|