Rustのマクロprintln!
は、常に各出力の最後に改行文字を残します。例えばRustに改行文字を入れずに出力をプリントするにはどうしたらいいですか?
println!("Enter the number : ");
io::stdin().read_line(&mut num);
が出力
Enter the number :
56
を与える、私は新しい行になるように、ユーザの入力56
を望んでいません。これはどうすればいいですか?
Rustのマクロprintln!
は、常に各出力の最後に改行文字を残します。例えばRustに改行文字を入れずに出力をプリントするにはどうしたらいいですか?
println!("Enter the number : ");
io::stdin().read_line(&mut num);
が出力
Enter the number :
56
を与える、私は新しい行になるように、ユーザの入力56
を望んでいません。これはどうすればいいですか?
代わりにprint!
macroを使用できます。
print!("Enter the number : ");
io::stdin().read_line(&mut num);
注意:出力が直ちに放出される保証するためにio::stdout().flush()
を使用する必要があるかもしれないので、標準出力が頻繁にデフォルトでラインバッファリングされていることを
注意。
一見したように思えるよりもやっかいです。他の答えはprint!
マクロについて言及していますが、それほど単純ではありません。 stdoutは、すぐに画面に書き込まれない可能性があるため、フラッシュする必要があります。 flush()
は、std::io::Write
の一部である特性であり、そのためには動作範囲が必要です(これは初期の間違いです)。
use std::io;
use std::io::Write; // <--- bring flush() into scope
fn main() {
println!("I'm picking a number between 1 and 100...");
print!("Enter a number: ");
io::stdout().flush().unwrap();
let mut val = String::new();
io::stdin().read_line(&mut val)
.expect("Error getting guess");
println!("You entered {}", val);
}
"* stdoutは頻繁にデフォルトで行バッファリングされるので、出力がすぐに出力されるようにするには' io :: stdout().flush() 'を使う必要があるかもしれません*" - https: //doc.rust-lang.org/std/macro.print.html – ArtemGr
@ArtemGr:C++(とCI think)では、 'stdin'から読み込もうとすると' stdout'バッファが直ちにフラッシュされます。私はRustと同じ動作を期待していましたが(誤っているかもしれません)、 'print! 'ページに表示されている例は' stdin'から読み込まれていないので、この点では決定的ではありません...もっと情報がありますか? @MatthieuM。 –
私は夜間にWindowsとLinuxでRustと簡単なテストを行いました。**答えのコードには**標準出力がありません。 "数字を入力してください:"は**プログラムが終了した後に**印刷され、 'read_line'が起こる前ではありません。 – ArtemGr