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

DDD
リリース: 2024-10-24 04:27:31
オリジナル
253 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!