現時点で私を悩ませている問題があります。ユーザーからの入力を取得するときに、ループを使用して、ユーザーが有効な入力を入力するまで再試行するように求めます。
// 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)
}
上記を実行し、ユーザーが有効な入力を入力した場合、問題はありません:
整数を入力してください: <br>
3
3
終了コード 0、プロセスは正常に終了しました。
しかし、代わりに文字列を入力してみてください。
整数を入力してください: <strong>何?
入力が無効です。整数を入力してください:
無効な入力です。整数を入力してください:
申し訳ありません...
など、文字列が使い果たされるまで、文字ごとにループし続けます。1文字入力しても2回ループしますが、改行を解析していると思います。
とにかく、Go で Stdin をフラッシュする方法が必要ですか?
PSそのような機能がない場合、同等の機能を提供するためにどのように回避しますか? 私もそれで失敗した...