Go 围棋:我试图猜测我的数字,但我的程序无法正确解释数字
当我运行这个程序时,我的程序总是吐得太低,请再猜一次。我输入:100作为要猜的数字,然后猜到101,它说的太低了。我现在真的不知道该怎么办,有人知道这个程序为什么会这样做吗? 笔记:Go 围棋:我试图猜测我的数字,但我的程序无法正确解释数字,go,Go,当我运行这个程序时,我的程序总是吐得太低,请再猜一次。我输入:100作为要猜的数字,然后猜到101,它说的太低了。我现在真的不知道该怎么办,有人知道这个程序为什么会这样做吗? 笔记: input21总是=到0您需要了解类型扫描仪的工作原理。仔细阅读类型扫描器及其方法的文档,并查看示例 例如,Scan将扫描器提前到下一个标记,然后通过Bytes或Text方法可以使用该标记 对于缓冲流输入,每个文件有多个扫描仪是危险的 猜一个你自己输入的数字是没有意思的。使用随机数生成器,例如“package ma
input21总是=到0您需要了解类型扫描仪的工作原理。仔细阅读类型扫描器及其方法的文档,并查看示例 例如,Scan将扫描器提前到下一个标记,然后通过Bytes或Text方法可以使用该标记 对于缓冲流输入,每个文件有多个扫描仪是危险的 猜一个你自己输入的数字是没有意思的。使用随机数生成器,例如“package math/rand” 解释代码中的所有问题需要很长时间,所以这里有一个简单的示例
package main
import "fmt"
import bf "bufio"
import "os"
import "strconv"
type SVC int
func main() {
fmt.Println("Loaded")
var gmber = bf.NewScanner(os.Stdin)
gmber.Scan()
i := 1
for i < 40 {
fmt.Println("\n")
i++
}
var input2 = bf.NewScanner(os.Stdin)
fmt.Println("Make a guess:")
var input21, err = strconv.Atoi(input2.Text())
var gmber1, err0 = strconv.Atoi(gmber.Text())
input2.Scan()
for {
if input21 == gmber1{
break
}
if input21 > gmber1 {
fmt.Println("Too high, Guess again")
input2.Scan()
}
if input21 < gmber1 {
fmt.Println("Too low, Guess again")
input2.Scan()
}
}
fmt.Println("You win!")
fmt.Println(err)
fmt.Println(err0)
}
每当您有一个返回错误值的函数时,必须检查它是否为nil。只有在完成此操作后,才能访问函数返回的任何其他值
当您添加此正确的错误处理时,您将看到程序失败的地方。我没有重置扫描仪,在if结束时重新评估扫描仪,您必须重新声明strconv.Atoi您尝试过进行任何调试吗?看看input21的设置位置。另外,我不知道为什么你有两个不同的扫描仪读取标准输入。打印你正在读取的值,看看它们是什么
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
var number = rand.Intn(100)
fmt.Println("Make a guess:")
var scanner = bufio.NewScanner(os.Stdin)
for scanner.Scan() {
var guess, err = strconv.Atoi(scanner.Text())
if err != nil {
fmt.Print("Input error")
} else if guess == number {
break
} else if guess > number {
fmt.Print("Too high")
} else if guess < number {
fmt.Print("Too low")
}
fmt.Println(", Guess again:")
}
if scanner.Err() != nil {
fmt.Println("I give up!")
}
fmt.Println("You win!")
}