2016-05-30 2 views

Antwort

11

Sie können stattdessen die print! macro verwenden.

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

Vorsicht:

anzumerken, dass stdout standardmäßig häufig zeilen gepuffert ist, so dass es notwendig sein kann, io::stdout().flush() verwenden die Ausgabe zu gewährleisten sofort emittiert wird.

+11

"*, dass stdout Hinweis häufig ist standardmäßig zeilen gepuffert, so kann es erforderlich sein zu verwenden' io :: stdout() flush() ', um sicherzustellen, der Ausgang sofort emittiert wird *.." - https: //doc.rust-lang.org/std/macro.print !.html – ArtemGr

+0

@ArtemGr: In C++ (und CI denke), wenn Sie versuchen, von 'stdin' zu lesen, wird der' stdout' Puffer sofort geleert. Ich hätte (vielleicht zu Unrecht) dasselbe Verhalten von Rust erwartet, und das Beispiel auf der 'print!' Seite liest nicht von 'stdin', daher ist es in dieser Hinsicht nicht beweiskräftig ... hast du mehr Informationen? –

+0

@MatthieuM. Ich habe einen einfachen Test unter Windows und Linux mit Rust nächtlich gemacht, und es gibt ** kein stout flush ** im Code der Antwort, z.B. "Geben Sie die Nummer ein:" wird nur gedruckt ** nachdem das Programm beendet wurde ** und nicht bevor die 'read_line' passiert. – ArtemGr

5

Es ist schwieriger als es auf den ersten Blick scheinen würde. Andere Antworten erwähnen das Makro print!, aber es ist nicht ganz so einfach. Sie müssen wahrscheinlich stdout löschen, da es möglicherweise nicht sofort auf den Bildschirm geschrieben wird. flush() ist ein Merkmal, das Teil von std::io::Write ist, so dass es in Reichweite sein muss, damit es funktioniert (das ist ein ziemlich einfacher früher Fehler).

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