Макрос print! как использовать

Пытаюсь сделать ввод и вывод данных на одной строке, т.е. хочу чтобы было так:

Введите число: ... //какой-то ввод

Использование макроса print!, не выводит текст сразу, он выводится когда-то потом. Как решение нашел следующее и оно работает:

let mut enter = String::new();
print!("Введите число:");
io::stdout().flush().unwrap();
io::stdin()
    .read_line(&mut enter)
    .expect("Ошибка чтения ввода!");

В документации говориться что print! и println! отличаются только переводом строки, но тогда вопрос почему println! срабатывает сразу, а print! потом. Почему так происходит? Можно ли как-то без дополнительного кода использовать print!, там где он уместен?

PS: видел вопрос в котором аналогичная тема поднимается, там как раз предлагают использовать аналогичный код, но почему???


Ответы (1 шт):

Автор решения: Newuser

Лучшее решение в вашем случае будет просто использовать это:

fn main() {
let mut enter = String::new();
eprint!("Введите число:");
io::stdin()
    .read_line(&mut enter)
    .expect("Ошибка чтения ввода!");
}

Я не понимаю, чем отличается eprint от print, но это работает.

→ Ссылка