Как напечатать вывод без завершающей строки в Rust?

rust newline println

8544 просмотра

2 ответа

Макрос println!в Rust всегда оставляет символ новой строки в конце каждого вывода. Например

println!("Enter the number : ");
io::stdin().read_line(&mut num);

дает вывод

Enter the number : 
56

Я не хочу, чтобы ввод пользователя 56был в новой строке. Как мне это сделать?

Автор: 7_R3X Источник Размещён: 12.11.2019 09:14

Ответы (2)


21 плюса

Решение

Вместо этого вы можете использовать print!макрос .

print!("Enter the number : ");
io::stdin().read_line(&mut num);

Осторожно:

Обратите внимание, что stdout часто буферизуется по умолчанию, поэтому может потребоваться использовать его io::stdout().flush()для немедленной выдачи выходных данных.

Автор: sjagr Размещён: 30.05.2016 06:45

28 плюса

Это сложнее, чем кажется на первый взгляд. Другие ответы упоминают print!макрос, но это не так просто. Скорее всего, вам потребуется очистить стандартный вывод, так как он может не сразу появиться на экране. 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);
}
Автор: user1411616 Размещён: 29.12.2016 09:10
32x32