Как распечатать выходные данные без задней строки в Rust?
Макрос println!
в Rust всегда оставляет символ новой строки в конце каждого вывода. Например
println!("Enter the number : ");
io::stdin().read_line(&mut num);
дает выход
Enter the number :
56
Я не хочу, чтобы пользовательский ввод 56
находился в новой строке. Как это сделать?
Ответы
Ответ 1
Вместо этого можно использовать print!
macro.
print!("Enter the number : ");
io::stdin().read_line(&mut num);
Осторожно:
Обратите внимание, что stdout часто по умолчанию буферизируется по строке, поэтому может потребоваться использование io::stdout().flush()
, чтобы гарантировать, что выход будет немедленно удален.
Ответ 2
Это сложнее, чем казалось бы на первый взгляд. В других ответах упоминается макрос 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);
}