小编the*_*T's的帖子

如何在Go中的fmt.Scanf()之后刷新Stdin?

这是一个困扰我的问题.当从用户获得输入时,我想使用循环来要求用户重试,直到他们输入有效输入:

// user_input.go
package main

import (
    "fmt"
)

func main() {
    fmt.Println("Please enter an integer: ")

    var userI int

    for {
        _, err := fmt.Scanf("%d", &userI)
        if err == nil {
            break
        }
        fmt.Println("Sorry, invalid input. Please enter an integer: ")
    }

    fmt.Println(userI)    
}
Run Code Online (Sandbox Code Playgroud)

运行以上操作,如果用户输入有效输入,没问题:

请输入一个整数: 

3

3

退出代码0,正常退出流程.

但是尝试输入一个字符串呢?

请输入一个整数: 
 什么?
对不起,输入无效.请输入一个整数:

抱歉,输入无效.请输入一个整数:

抱歉......

等等,它会逐个字符循环,直到字符串用完为止.即使输入一个字符循环两次,我假设它解析换行符.

无论如何,必须有一种方法在Go中冲洗Stdin?

PS如果没有这样的功能,您将如何解决它以提供相同的功能?我甚至都失败了......

stdin user-input go

5
推荐指数
2
解决办法
4962
查看次数

标签 统计

go ×1

stdin ×1

user-input ×1