改写猜谜游戏代码,使用fmt.Scan简化代码实现。
通过使用fmt.Scan来简化代码,以读取用户的输入。使用fmt.Scan可以避免使用缓冲读取器以及相关的错误处理。改写代码如下:
package main
import (
"fmt"
"math/rand"
"strconv"
"time"
)
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
fmt.Println("Please input your guess")
for {
var input string
_, err := fmt.Scan(&input)
guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("Invalid input. Please enter an integer value")
continue
}
fmt.Println("You guessed:", 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
}
}
}
思路:
- 初始化:我们初始化随机种子,然后生成一个小于100的随机整数作为秘密数字。
- 用户提示:我们提示用户猜测数字。
- 用户输入:不再使用缓冲读取器来读取用户输入,而是使用
fmt.Scan直接将用户的输入扫描到我们的字符串变量input中。 - 转换输入:我们尝试使用
strconv.Atoi将字符串输入转换为整数。如果不是有效的整数,我们会通知用户,并继续进行下一次循环迭代。 - 猜测检查:在将输入转换为整数后,检查猜测的数字是大于、小于还是等于秘密数字。根据结果向用户提供适当的提示;
- 重复直到正确:这个过程会不断重复,直到用户猜对为止。
与缓冲读取器方法相比,使用fmt.Scan提供了一种更简化的方式来获取用户输入。它直接读取并将输入分配给提供的变量,非常实用。