私は、ユーザーに式の入力を求め、結果を出力し、次の式を再度求める電卓プログラムを作成していました。
しかし、fmt.Scanln() を使用して行 (スペースやタブなどのスペース文字を含む) を読み取ると、問題が起こりました。
スペース文字 (そうです! 改行ではなくスペース文字) に遭遇すると、読み取りが停止しました。
例:
入力: 2 3.5(5)
獲得数: 2
しかし、さらにひどいことを言いました!
入力内の残りの文字はまだ存在しており、Scanln() 関数を再度呼び出すと、それらが読み取られます。
fmt パッケージには Scanf() と呼ばれる別の関数があります。
この男は違う!
形式指定子に基づいて入力を受け取り、指定した変数に格納します。
コード:
text := "" fmt.Println("Enter expression:") for { var temp rune fmt.Scanf("%c", &temp) if temp == '\n' { break } text += string(temp) } fmt.Printf("You entered:\n %v", text)
説明:
1.「式を入力してください:」を出力します
2.ループが開始します
3.ループはユーザーからの入力を文字ごとに受け取ります(Go ではルーンごとに)
5.各反復で、そのルーンを取得してテキスト変数に追加または追加します。
6.「n」を読み取ると、ループが中断され、text 変数内の入力行が取得されます。
7.ここでは、ルーンは スペース文字 であることもできます。
つまり、文字通り「n」も読みます。
(スペース文字の読み取りは Scanf("%c",&var_name) の例外であり、これが私たちが望むことです!)
注: 複数行を読んだときに発生する問題も解決します。つまり、複数行を読んだときに予期しない入力または動作が発生します(正確なことはわかりません)理由です!).
しかし、ここでは、「n」も(一時変数に)含めて文字ごとに読み取っているため、これらのエラーはすべて排除されます!
以上がgo でスペースを含む入力を取得するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。