英文:
Golang how to validate user input for only int
问题
在Go语言中,可以使用fmt.Scanf
函数来扫描整数。以下是一个示例代码,用于扫描用户输入的年龄:
package main
import (
"fmt"
)
func AgeInput() {
var age int
fmt.Println("请输入您的年龄:")
_, err := fmt.Scanf("%d", &age)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("您输入的年龄是:", age)
}
func main() {
AgeInput()
}
在上面的代码中,fmt.Scanf
函数用于扫描用户输入的整数,并将其存储在age
变量中。如果输入的不是整数,将会打印出错误信息。
另外,你也可以使用strconv.Atoi
函数将用户输入的字符串转换为整数,并进行验证。以下是一个示例代码:
package main
import (
"fmt"
"strconv"
)
func AgeInput() {
var ageStr string
fmt.Println("请输入您的年龄:")
_, err := fmt.Scanln(&ageStr)
if err != nil {
fmt.Println(err)
return
}
age, err := strconv.Atoi(ageStr)
if err != nil {
fmt.Println("输入的不是有效的年龄")
return
}
fmt.Println("您输入的年龄是:", age)
}
func main() {
AgeInput()
}
在上面的代码中,fmt.Scanln
函数用于扫描用户输入的字符串,并将其存储在ageStr
变量中。然后使用strconv.Atoi
函数将ageStr
转换为整数类型的age
变量。如果转换失败,则说明输入的不是有效的年龄。
希望这些代码对你有帮助!如果有任何问题,请随时提问。
英文:
is there a way to scan only integers in Go? like an age or a number of order etc. so you don't want user to enter letters or signs.
Scanf apparently don't work, it get skipped and print instead "unexpected newline"
func AgeInput(age int) {
fmt.Println("enter your Age :..")
_, err := fmt.Scanf("%d", &UserAge)
if err != nil {
fmt.Println(err)
}
}
I also tried to use contains and containsAny to check if the input has any numbers and if not then it is not valid and the user will be asked to try again but it returns either always true or always false
func ValidateAge(age int){
AgeInput(age)
if strings.Contains(strconv.Itoa(UserAge), "1234567890"){
validAge = true
}
for !validAge {
fmt.Println("wrong input try again")
AgeInput(age)
}
}
答案1
得分: 1
我认为你在这里的思路是正确的,但只需要稍微调整一下你的代码:
package main
import (
"fmt"
)
func main() {
fmt.Println("请输入您的年龄:")
var userAge int
for true {
_, err := fmt.Scanf("%d", &userAge)
if err == nil {
break
}
fmt.Println("无效的年龄 - 请重试")
var dump string
fmt.Scanln(&dump)
}
fmt.Println(userAge)
}
Scanf只会扫描到匹配的部分,但会保留剩余的行,所以我们需要使用fmt.Scanln来清除标准输入缓冲区。
英文:
I think you were on the right track here, but just need to tweak you code a little:
package main
import (
"fmt"
)
func main() {
fmt.Println("Enter your Age: ")
var userAge int
for true {
_, err := fmt.Scanf("%d", &userAge)
if err == nil {
break
}
fmt.Println("Not a valid age - try again")
var dump string
fmt.Scanln(&dump)
}
fmt.Println(userAge)
}
Scanf only scans until it gets a match, but will leave the rest of the line untouched, so we need to clear the STDIN buffer with a fmt.Scanln
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论