Đây là một vấn đề đang làm tôi lo lắng vào lúc này. Khi nhận được thông tin từ người sử dụng, tôi muốn sử dụng một vòng lặp để yêu cầu người dùng thử lại cho đến khi họ nhập vào hợp lệ:Làm thế nào để tuôn ra Stdin sau khi fmt.Scanf() trong Go?
// 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)
}
Chạy trên, nếu người dùng nhập vào hợp lệ, không có vấn đề:
Vui lòng nhập một số nguyên:
thoát mã 0, quá trình thoát bình thường.
Nhưng thử nhập chuỗi thay vào đó?
Vui lòng nhập số nguyên: cái gì?
Rất tiếc, mục nhập không hợp lệ. Vui lòng nhập một số nguyên:
Rất tiếc, mục nhập không hợp lệ. Vui lòng nhập số nguyên:
Xin lỗi ...
Vv và giữ ký tự lặp theo ký tự cho đến khi chuỗi hết. Ngay cả khi nhập một chuỗi ký tự đơn hai lần, tôi giả định khi nó phân tích cú pháp dòng mới.
Dù sao thì, phải có cách để xả Stdin trong Go?
P.S. Trong trường hợp không có tính năng như vậy, bạn sẽ làm việc xung quanh nó như thế nào để cung cấp chức năng tương đương? Tôi đã thất bại ngay cả lúc đó ...
Đây là giải pháp tốt. Cảm ơn! –
Chỉ sử dụng 'Scanln' được ghi lại là không gian trắng và đọc cho đến khi dòng mới. –