猜谜游戏踩坑点|青训营笔记

97 阅读1分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。 课程代码:

package main
import (
  "bufio"
  "fmt"
  "math/rand"
  "os"
  "strconv"
  "strings"
  "time"
)
func main() {
  maxNum := 100
  rand.Seed(time.Now().UnixNano())
  secretNumber := rand.Intn(maxNum)
  // fmt.Println("The secret number is ", secretNumber)
  fmt.Println("Please input your guess")
  reader := bufio.NewReader(os.Stdin)
  for {
    input, err := reader.ReadString('\n')
    if err != nil {
      fmt.Println("An error occured while reading input. Please try again", err)
      continue
    }
    input = strings.TrimSuffix(input, "\n")
    guess, err := strconv.Atoi(input)
    if err != nil {
      fmt.Println("Invalid input. Please enter an integer value")
      continue

    }
    fmt.Println("You guess is", guess)
    if guess > secretNumber {
      fmt.Println("Your guess is bigger than the secret number. Please try again")
    } else if guess < secretNumber {
      fmt.Println("Your guess is smaller than the secret number. Please try again")
    } else {
      fmt.Println("Correct, you Legend!")
      break
    }
  }
}

实际运行中发现一直报数据非法,后面经过调试发现字符串还有""˚"\r"存在。所以还得加入

    input = strings.TrimSuffix(input, "\r")

此时程序运行正确。 后续查询资料得知bufio在windows读取多行直到(CRLF)\r\n 分隔符。所以还得考虑""˚"\r"