calculator.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // calculator.go
  2. // example: calculate 3 + 4 = 7 as input: 3 ENTER 4 ENTER + ENTER --> result = 7,
  3. package main
  4. import (
  5. "./stack/stack"
  6. "bufio"
  7. "fmt"
  8. "os"
  9. "strconv"
  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.(int)+q.(int))
  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.(int)-q.(int))
  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.(int)*q.(int))
  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.(int)/q.(int))
  46. default:
  47. fmt.Println("No valid input")
  48. }
  49. }
  50. }