ここに私の悩みがあります。ユーザからの入力を取得する場合、私は、彼らが有効な入力入力するまで再試行するようにユーザーに依頼するループを採用したい:ユーザーが有効な入力を入力した場合、上記を実行する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)
}
を、全く問題ありません:
処理が正常に終了し、
終了コード0:整数を入力してください。
代わりに文字列を入力してください。
整数を入力してください。 何ですか?
申し訳ありませんが、無効な入力です。整数を入力してください:
申し訳ありませんが、無効な入力です。整数を入力してください:
申し訳ありません...
など、文字が使い果たされるまで文字を繰り返し続けます。 1文字を2回入力するだけでも、改行を解析すると仮定します。
とにかく、GoでStdinをフラッシュする方法が必要ですか?
P.S.このような機能がない場合、同等の機能を提供するためにはどうすれば対処できますか?私もそれで失敗しました...
これは適切な回避策です。ありがとう! –
ちょうど 'Scanln'は空白を消費し、改行まで読むと書かれています。 –