东莞个人网站建设,企业展厅建筑,wordpress分类下的所有文章加密,网站建设优化项目文章目录 程序介绍设置随机数读取用户输入实现判断逻辑实现游戏循环完整代码 程序介绍
首先生成一个介于1~100之间的随机数#xff0c;然后提示玩家输入数字#xff0c;并告诉玩家是猜对了还是猜错了#xff0c;如果对了程序就结束#xff0c;如果错了就提醒玩家是大了还是… 文章目录 程序介绍设置随机数读取用户输入实现判断逻辑实现游戏循环完整代码 程序介绍
首先生成一个介于1~100之间的随机数然后提示玩家输入数字并告诉玩家是猜对了还是猜错了如果对了程序就结束如果错了就提醒玩家是大了还是小了然后玩家继续输入。
设置随机数
maxNum : 100
rand.Seed(time.Now().UnixNano()) //修改随机数种子为当前时间戳
secretNumber : rand.Intn(maxNum)rand.Seed(seed int64)播种seed为随机数种子func time.Now() time.Time获取当前时间func (time.Time).UnixNano() int64将Time转成时间戳返回func rand.Intn(n int) int设置一个随机数随机数的范围为[0, n)
读取用户输入
这里用的是高并发输入可以用简单的Scan进行输入。
fmt.Print(Guess a number between 1 and, maxNum, : )
reader : bufio.NewReader(os.Stdin)
input, err : reader.ReadString(\n)
if err ! nil {fmt.Println(An error occurred while reading input. Try again, err)return
input strings.TrimSuffix(input, \r\n) //去掉input末尾的回车换行符guess, err : strconv.Atoi(input) //将input转换为整数
if err ! nil {fmt.Print(Invalid input. Try again: )return
fmt.Print(Your guess is , guess, . )func (b *Reader) ReadString(delim byte) (string, error)ReadString一直在Reader* b中读取直到读到delimdelim也会被读进去 reader : bufio.NewReader(os.Stdin)将reader与标准输入流Stdin关联 func NewReader(rd io.Reader) *ReaderNewReader返回一个具有默认缓冲区大小新的Reader input, err : reader.ReadString(\n)从reader中读取遇到\n就停止把包括\n在内的内容放到字符串input中错误信息返回到err中 func (b *Reader) ReadString(delim byte) (string, error)ReadString读取直到输入中第一次出现分隔符delim返回一个字符串其中包含delim之前的数据并包括delim。如果ReadString在找到分隔符之前遇到错误它将返回在错误之前读取的数据和错误本身(通常是io.EOF)。 input strings.TrimSuffix(input, \n)因为读入的时候把回车符\r和换行符\n也读进来了所以这一步是去掉换行符。只保留input中换行符之前的内容不包括换行符。当然也可以使用 func TrimSuffix(s, suffix string) stringTrimSuffix返回s不包含所提供的后缀字符串。如果s没有以后缀结尾则返回不变的s。 guess, err : strconv.Atoi(input)将字符串input转成整型存给guess func Atoi(s string) (int, error)Atoi相当于转换为int类型的ParseInt(s, 10,0)
实现判断逻辑
if guess secretNumber {fmt.Print(Too Big! Try again: )
} else if guess secretNumber {fmt.Print(Too Small! Try again: )
} else {fmt.Println(You got it!)break
}一个简单的if分支语句没什么好说的。
实现游戏循环
fmt.Println(Guess a number between 1 and , maxNum, : )
reader : bufio.NewReader(os.Stdin)
for {input, err : reader.ReadString(\n)if err ! nil {fmt.Println(An error occurred while reading input. Try again, err)continue}input strings.TrimSuffix(input, \r\n) //去掉input末尾的回车换行符guess, err : strconv.Atoi(input) //将input转换为整数if err ! nil {fmt.Print(Invalid input. Try again: )continue}fmt.Print(Your guess is , guess, . )if guess secretNumber {fmt.Print(Too Big! Try again: )} else if guess secretNumber {fmt.Print(Too Small! Try again: )} else {fmt.Println(You got it!)break}
}上面只完成了用户的一次猜测用户输入往后的部分改成循环即可完成猜对记得跳出循环。当输入错误的时候不要直接返回了可以改为continue继续循环
完整代码
package mainimport (bufiofmtmath/randosstrconvstringstime
)func main() {// 设置随机数maxNum : 100rand.Seed(time.Now().UnixNano()) //修改随机数种子为当前时间戳secretNumber : rand.Intn(maxNum)fmt.Print(Guess a number between 1 and , maxNum, : )reader : bufio.NewReader(os.Stdin)for {input, err : reader.ReadString(\n)if err ! nil {fmt.Println(An error occurred while reading input. Try again, err)continue}input strings.Trim(input, \r\n) //去掉input末尾的换行符guess, err : strconv.Atoi(input) //将input转换为整数if err ! nil {fmt.Print(Invalid input. Try again: )continue}fmt.Print(Your guess is , guess, . )if guess secretNumber {fmt.Print(Too Big! Try again: )} else if guess secretNumber {fmt.Print(Too Small! Try again: )} else {fmt.Println(You got it!)break}}
}