How do I print output without a trailing newline in Rust?

RustNewlinePrintln

Rust Problem Overview


The macro println! in Rust always leaves a newline character at the end of each output. For example

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

gives the output

Enter the number : 
56

I don't want the user's input 56 to be on a new line. How do I do this?

Rust Solutions


Solution 1 - Rust

It's trickier than it would seem at first glance. Other answers mention the print! macro but it's not quite that simple. You'll likely need to flush stdout, as it may not be written to the screen immediately. flush() is a trait that is part of std::io::Write so that needs to be in scope for it to work (this is a pretty easy early mistake).

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);
}

Solution 2 - Rust

You can use the print! macro instead.

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

Beware:

> Note that stdout is frequently line-buffered by default so it may be necessary to use io::stdout().flush() to ensure the output is emitted immediately.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Question7_R3XView Question on Stackoverflow
Solution 1 - RustInduaneView Answer on Stackoverflow
Solution 2 - RustsjagrView Answer on Stackoverflow