ホームページ  >  記事  >  バックエンド開発  >  Windows 上の Go で 2 番目の入力で Scanf が失敗するのはなぜですか?

Windows 上の Go で 2 番目の入力で Scanf が失敗するのはなぜですか?

DDD
DDDオリジナル
2024-10-26 11:14:29558ブラウズ

Why Does Scanf Fail on Second Input in Go on Windows?

Windows 上の GOLang で Scanf を使用する際のエラー

GOLang の Scanf 関数は、ユーザー入力を 2 回取得しようとすると問題を引き起こす可能性があります。最初の入力は正常に取得されますが、Windows システムでの 2 回目の試行中に関数が突然終了します。この現象は macOS では発生しません。

<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 trailing newline character
}</code>

この変更されたコードは問題に対処し、Windows と macOS の両方でシームレスに機能します。

以上がWindows 上の Go で 2 番目の入力で Scanf が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。