当输入多个字母作为输入时,循环多次打印语句 - GoLang
Loop prints statement multiple times when entering multiple letters as input - GoLang
我是 GoLang 的新手,我有一个问题,如果我输入多个字母作为输入,结果将打印多次。
用户需要键入一个非 0 且非字母的数字。
如果您键入一个字母,变量 'num1' 将为“0”(通过打印变量进行检查)
如果用户键入“0”或字母,他将再次尝试输入数字。
示例:
如果我输入“d”,它将按原样打印一次。
如果我键入“dd”,它将打印两次。
如果我键入“ddd”,它将打印三次。
但是,如果我输入“0”或“00”,它将只打印一次。
我怎样才能做到,如果我输入多个字母,结果总是打印一次?
代码:
package main
import "fmt"
func main() {
var num1 float64
for {
fmt.Print("\nFirst Number: ")
fmt.Scanln(&num1)
if num1 == 0 {
fmt.Print("Invalid input for 'First Number'")
} else {
break
}
}
fmt.Print("passed")
}
PS: 如果可能,变量 num1 应保留为 'float64'
感谢帮助^^
您面临的问题是 fmt.Scan 当无法将字符串转换为浮点数时,未扫描的位保留在缓冲区中。您可以尝试通过实际阅读并忽略它来清除缓冲区。
func main() {
var num1 float64
stdin := bufio.NewReader(os.Stdin)
for {
fmt.Print("\nFirst Number: ")
fmt.Scan(&num1)
if num1 == 0 {
stdin.ReadString('\n')
fmt.Print("Invalid input for 'First Number'")
} else {
break
}
}
fmt.Print("passed")
}
我会推荐另一种方法,我像这样从字符串中手动解析浮点数:
func main() {
var num1 float64
for {
var input string
var err error
fmt.Print("\nFirst Number: ")
fmt.Scan(&input)
num1, err = strconv.ParseFloat(input, 64)
if err != nil {
fmt.Print("Invalid input for 'First Number'")
}
if num1 == 0 {
fmt.Print("Invalid input for 'First Number'")
} else {
break
}
}
fmt.Print("passed")
}
并始终确保阅读错误并理解它们。
我是 GoLang 的新手,我有一个问题,如果我输入多个字母作为输入,结果将打印多次。
用户需要键入一个非 0 且非字母的数字。 如果您键入一个字母,变量 'num1' 将为“0”(通过打印变量进行检查)
如果用户键入“0”或字母,他将再次尝试输入数字。
示例: 如果我输入“d”,它将按原样打印一次。 如果我键入“dd”,它将打印两次。 如果我键入“ddd”,它将打印三次。 但是,如果我输入“0”或“00”,它将只打印一次。
我怎样才能做到,如果我输入多个字母,结果总是打印一次?
代码:
package main
import "fmt"
func main() {
var num1 float64
for {
fmt.Print("\nFirst Number: ")
fmt.Scanln(&num1)
if num1 == 0 {
fmt.Print("Invalid input for 'First Number'")
} else {
break
}
}
fmt.Print("passed")
}
PS: 如果可能,变量 num1 应保留为 'float64'
感谢帮助^^
您面临的问题是 fmt.Scan 当无法将字符串转换为浮点数时,未扫描的位保留在缓冲区中。您可以尝试通过实际阅读并忽略它来清除缓冲区。
func main() {
var num1 float64
stdin := bufio.NewReader(os.Stdin)
for {
fmt.Print("\nFirst Number: ")
fmt.Scan(&num1)
if num1 == 0 {
stdin.ReadString('\n')
fmt.Print("Invalid input for 'First Number'")
} else {
break
}
}
fmt.Print("passed")
}
我会推荐另一种方法,我像这样从字符串中手动解析浮点数:
func main() {
var num1 float64
for {
var input string
var err error
fmt.Print("\nFirst Number: ")
fmt.Scan(&input)
num1, err = strconv.ParseFloat(input, 64)
if err != nil {
fmt.Print("Invalid input for 'First Number'")
}
if num1 == 0 {
fmt.Print("Invalid input for 'First Number'")
} else {
break
}
}
fmt.Print("passed")
}
并始终确保阅读错误并理解它们。