Как распечатать выходные данные без задней строки в 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);
}