RUST: flush et buffer

a marqué ce sujet comme résolu.

Salut, je ne comprend pas le buffer et le flush. extrait:

extern crate rand;

use std::io::{stdin, stdout, Write};
use rand::random;

fn main() {
    // Write to console
    println!("Welcome to this number guessing game!");
    print!("Please enter your name: ");

    // Make sure the out-buffer is empty
    let _ = stdout().flush();

    // Create mutable (writeable) string variable
    let mut input = String::new();

    // Read user input
    stdin().read_line(&mut input).expect("Did not enter a correct string");

    // Prevent us from accidentally overwriting the username by making it immutable
    let player_name: String = input.trim().into();

    // Create random number
    let number = random::<u32>() % 100 + 1;

    // Output what we have so far
    println!("Your name is {} and my random number is {}!", player_name, number);
}

Pour des raisons de performance, un logiciel qui écrit dans la sortie standard (le texte en console) n’est pas écrit immédiatement une fois l’instruction exécutée (la fonctionprintln).

En réalité il écrit dans une mémoire tampon (buffer en anglais) où cette chaine est stockée puis dans certaines conditions affichée sur ta console. En général la condition est une taille de texte importante ou un saut de ligne matérialisé par '\n' habituellement.

Regarde la différence entre la ligne 8 et 9 de ton code. Le premier utilise println tandis que l’autre print. Le premier réalise un saut de ligne automatiquement, l’autre non pour permettre que l’utilisateur tape le nom à côté de ce texte.

Comme cette chaîne est petite et sans saut de ligne, elle ne sera vraisemblablement pas affichée. Donc le programmeur vide la mémoire tampon à la main ici pour s’assurer que le texte sera écrit malgré tout sur ta console.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte