猜谜游戏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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.Trim(input, "\r\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
}
}
}

解释:这段代码是一个简单的猜数字游戏程序,使用 Go 语言编写。

首先,代码导入了一些需要使用的包,包括 "bufio""fmt""math/rand""os""strconv""strings",这些包提供了处理输入输出、生成随机数和字符串处理的功能。

接下来,在 main 函数中,定义了一个变量 maxNum,它表示可猜测的最大数字。然后使用 rand.Seed(time.Now().UnixNano()) 设置随机数生成器的种子,以确保每次程序运行时生成的随机数是不同的。然后使用 rand.Intn(maxNum) 生成一个介于 0 和 maxNum 之间的随机整数作为秘密数字。

然后程序提示用户输入猜测的数字,并使用 bufio.NewReader(os.Stdin) 创建一个读取标准输入的读取器。

之后进入一个无限循环,在循环中不断读取用户输入的猜测数字,直到猜测正确为止。循环开始时,调用 reader.ReadString('\n') 读取用户输入的完整一行字符串,包括换行符。然后使用 strings.Trim(input, "\r\n") 去除字符串开头和结尾处的回车符和换行符,并将修剪后的字符串赋值给 input 变量。

接下来,使用 strconv.Atoi(input) 将修剪后的字符串转换为整数类型,并将转换后的结果赋值给 guess 变量。如果转换出错,则输出错误信息并要求用户重新输入。

然后程序输出用户猜测的数字,并与秘密数字进行比较。如果猜测数字大于秘密数字,则输出提示信息告诉用户猜测数字太大;如果猜测数字小于秘密数字,则输出提示信息告诉用户猜测数字太小。如果猜测数字与秘密数字相等,则输出提示信息告诉用户猜测正确,并跳出循环。

整个过程会循环进行,直到用户猜测正确为止。