calculator.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // calculator.go
  2. // example: calculate 3 + 4 = 7 as input: 3 ENTER 4 ENTER + ENTER --> result = 7,
  3. package main
  4. import (
  5. "fmt"
  6. "strconv"
  7. "bufio"
  8. "os"
  9. "./stack/stack"
  10. )
  11. func main() {
  12. buf := bufio.NewReader(os.Stdin)
  13. calc1 := new(stack.Stack)
  14. fmt.Println("Give a number, an operator (+, -, *, /), or q to stop:")
  15. for {
  16. token, err := buf.ReadString('\n')
  17. if err != nil {
  18. fmt.Println("Input error !")
  19. os.Exit(1)
  20. }
  21. token = token[0:len(token)-2] // remove "\r\n"
  22. // fmt.Printf("--%s--\n",token) // debug statement
  23. switch {
  24. case token == "q": // stop als invoer = "q"
  25. fmt.Println("Calculator stopped")
  26. return
  27. case token >= "0" && token <= "999999":
  28. i, _ := strconv.Atoi(token)
  29. calc1.Push(i)
  30. case token == "+":
  31. q := calc1.Pop()
  32. p := calc1.Pop()
  33. fmt.Printf("The result of %d %s %d = %d\n", p, token, q, p + q)
  34. case token == "-":
  35. q := calc1.Pop()
  36. p := calc1.Pop()
  37. fmt.Printf("The result of %d %s %d = %d\n", p, token, q, p - q)
  38. case token == "*":
  39. q := calc1.Pop()
  40. p := calc1.Pop()
  41. fmt.Printf("The result of %d %s %d = %d\n", p, token, q, p * q)
  42. case token == "/":
  43. q := calc1.Pop()
  44. p := calc1.Pop()
  45. fmt.Printf("The result of %d %s %d = %d\n", p, token, q, p / q)
  46. default:
  47. fmt.Println("No valid input")
  48. }
  49. }
  50. }