Windows での Scanf 関数の癖
ユーザー入力に Scanf を利用しているときに、初回に入力を正常に取得するという独特の動作が観察されています。ただし、2 番目の入力リクエストをスキップし、関数を突然終了します。この問題は、特に Windows システムで実行している場合に発生します。
問題のコード:
<code class="go">func credentials() (string, string) { var username string var password string fmt.Print("Enter Username: ") fmt.Scanf("%s", &username) fmt.Print("Enter Password: ") fmt.Scanf("%s", &password) return username, password }</code>
解決策:
Scanf は区切り文字としてスペースに依存していることと、その直感的でない動作が問題となる可能性があります。これを軽減するには、bufio パッケージを使用することで、より洗練されたアプローチが提供されます。
<code class="go">func credentials() (string, string) { reader := bufio.NewReader(os.Stdin) fmt.Print("Enter Username: ") username, _ := reader.ReadString('\n') fmt.Print("Enter Password: ") password, _ := reader.ReadString('\n') return strings.TrimSpace(username), strings.TrimSpace(password) // Remove any trailing newline characters }</code>
以上がWindows で Scanf が入力をスキップするのはなぜですか?詳細な説明と解決策。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。