这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记
先上代码:
package main
import (
"fmt"
"math/rand"
"time"
)
// 一个猜数字小游戏
// 1. 生成一个100以内的随机数
// 2. 参与游戏者从终端进行数字输入
// 3. 比较输入的数字和随机产生的数字之间的关系,并给与参与者提示
// 4. 输入正确,提示猜对信息,最后结束程序并返回
func randNums(nums int) int {
rand.Seed(time.Now().UnixNano()) // 以当前时间戳作为随机数字生成的种子
secretNumber := rand.Intn(nums) // 通过rand.Intn()生成一个随机树
return secretNumber
}
func compareNums(inputNum, randNum int) int {
if inputNum > randNum {
fmt.Println("亲,猜的数字大了的呢~") // 这里的提示信息可以搞一个信息提示集,用随机数进行获取随机提示集中的信息
return 1 // 每回提示的信息不一致,哈哈
}else if inputNum < randNum {
fmt.Println("哎呦,猜的数字小了的呢~")
return -1
}else {
fmt.Println("哇~ 真棒!!!")
return 0
}
}
func main() {
fmt.Println("欢迎参与猜随机数小游戏:")
secretNumber := randNums(100)
var inputNum int
for {
_, err := fmt.Scanln(&inputNum)
if err != nil {
log.Println("您又调皮了,输入数字噻~")
continue
}
if res := compareNums(inputNum, secretNumber); res == 0 {
break
}
}
}
注意:
- 在使用随机数的时候,需要进行通过当前时间戳生成一个随机数种子,之后再再进行生成随机数的操作,否则生成的随机数都是第一次生成的随机数。
- 在使用_, err := fmt.Scanln(&inputNum)的时候,如果输入的不是数字,例如输入的是字符串"aaa",上述代码就会打印4次 fmt.Println("您又调皮了,输入数字噻~");如果输入的是"aa",则打印3次,如下图:
- 这段代码在我正常输入数字的情况下是没有问题的,可以正常获取数值,但是输入非数字的情况下,就会出现,
“输入多少个字符,if块里的错误代码就会执行多少遍+1的情况。”
这段代码的处理,有没有好一些的解决方法呢?
- 用以下这种方式输入,异常比较好处理吧。
如果有更好的处理方法,请在下面留言,交流,超级感谢~