ホームページ  >  記事  >  バックエンド開発  >  Go の fmt.Scanln で「改行が必要です」エラーが発生するのはなぜですか?

Go の fmt.Scanln で「改行が必要です」エラーが発生するのはなぜですか?

DDD
DDDオリジナル
2024-10-24 04:27:31254ブラウズ

Why Does Go's fmt.Scanln Give an

fmt.Scanln エラー: 予期された改行

Go で fmt.Scanln 関数を使用すると、「予期された改行」エラーが発生する可能性があります。これは、入力に予期される区切り文字 (通常はスペース) の前に改行文字が含まれている場合に発生します。これに対処するために、fmt.Scan と fmt.Scanln の動作を詳しく見てみましょう。

fmt.Scan は標準入力からスペースで区切られた値を読み取り、改行をスペースとして扱います。これらの値を対応する引数に割り当て、正常にスキャンされた項目の数を返します。

fmt.Scanln も同様に動作しますが、改行でスキャンを停止します。重要なことに、正常に完了するには、入力が改行または EOF で終わる必要があります。

これを説明するために、次の入力を考えてみましょう。

123
123.456
everybody loves ice cream

fmt.Scan を使用する場合、出力は次のようになります。 :

read 1 integer:  123
read 1 float64:  123.456
read 1 string:  everybody
Error:  Scan: expected newline

fmt.Scan は「みんなアイスクリームが大好き」を 2 つの文字列として解釈し、エラーが発生します。

ただし、同じ入力に fmt.Scanln を使用すると、出力は

read 1 integer:  123
read 1 float64:  123.456
read 1 string:  everybody loves ice cream

fmt.Scanln は改行を区切り文字として認識し、行全体を単一の文字列引数として正しく解析します。

改行文字で終わる行を読み取るにはbufio.Reader とその ReadString メソッドを使用できます:

line, err := buffer.ReadString('\n')

以上がGo の fmt.Scanln で「改行が必要です」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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