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