GO语言工程实践课后作业 | 青训营

33 阅读1分钟

改写猜谜游戏代码,使用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
		}
	}
}
思路:
  1. 初始化:我们初始化随机种子,然后生成一个小于100的随机整数作为秘密数字。
  2. 用户提示:我们提示用户猜测数字。
  3. 用户输入:不再使用缓冲读取器来读取用户输入,而是使用fmt.Scan直接将用户的输入扫描到我们的字符串变量input中。
  4. 转换输入:我们尝试使用strconv.Atoi将字符串输入转换为整数。如果不是有效的整数,我们会通知用户,并继续进行下一次循环迭代。
  5. 猜测检查:在将输入转换为整数后,检查猜测的数字是大于、小于还是等于秘密数字。根据结果向用户提供适当的提示;
  6. 重复直到正确:这个过程会不断重复,直到用户猜对为止。

与缓冲读取器方法相比,使用fmt.Scan提供了一种更简化的方式来获取用户输入。它直接读取并将输入分配给提供的变量,非常实用。