web-dev-qa-db-fra.com

Comment imprimer une sortie sans retour à la ligne dans Rust?

La macro println! in Rust laisse toujours un caractère de nouvelle ligne à la fin de chaque sortie. Par exemple

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

donne la sortie

Enter the number : 
56

Je ne veux pas la saisie de l'utilisateur 56 pour être sur une nouvelle ligne. Comment puis-je faire cela?

26
7_R3X

Vous pouvez utiliser la macro print! à la place.

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

Il faut se méfier:

Notez que stdout est fréquemment mis en mémoire tampon par défaut, il peut donc être nécessaire d'utiliser io::stdout().flush() pour garantir que la sortie est émise immédiatement.

28
sjagr

C'est plus compliqué qu'il n'y paraît à première vue. D'autres réponses mentionnent la macro print! Mais ce n'est pas aussi simple que cela. Vous devrez probablement vider stdout, car il peut ne pas être écrit sur l'écran immédiatement. flush() est un trait qui fait partie de std::io::Write et qui doit donc être en mesure de fonctionner (c'est une erreur précoce assez facile).

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