「fmt.Scanln Expected Newline」エラーの原因とその解決方法

Susan Sarandon
リリース: 2024-10-24 02:07:02
オリジナル
934 人が閲覧しました

What Causes

fmt.Scanln Expectation

Go で fmt.Scanln を使用すると、「fmt.Scanln Expected newline」というエラーが発生することがあります。このエラーとその影響を理解することは、デバッグや堅牢なコードの作成にとって重要です。

fmt.Scan と fmt.Scanln の動作

fmt.Scan はスペース区切りの値を読み取ります。標準入力から、改行をスペース文字として扱います。これは、すべての引数が入力されるか、エラーが発生するまで入力の解析を続けることを意味します。一方、 fmt.Scanln も標準入力から読み取りますが、終了点として改行文字を期待します。それ以降の入力は解析されません。

提供された Go コードでは、fmt.Scanln を使用して文字列 s を読み取るときに問題が発生します。入力には改行文字が含まれており、これにより fmt.Scanln の入力の終了がトリガーされます。ただし、後続の入力文字「みんなアイスクリームが大好き」はまだ存在しており、後続の fmt.Scan によって消費されます。 fmt.Scan は入力の最後に改行を期待しているため、これによりエラーが発生します。

代替手段

スペースを含み改行で終わるテキスト行を読み取るには、bufio.Reader の ReadString メソッドの使用を検討してください:

<code class="go">import "bufio"

func main() {
    reader := bufio.NewReader(os.Stdin)
    line, err := reader.ReadString('\n')
}</code>
ログイン後にコピー

結論

fmt.Scan と fmt.Scanln の異なる動作を理解することは、エラーを防止して書き込みを行うために重要です。期待に沿ったコード。テキスト行を読むとき、bufio.Reader や ReadString などの代替手段は、より明示的で効率的なソリューションを提供します。

以上が「fmt.Scanln Expected Newline」エラーの原因とその解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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