Jest to trudniejsze, niż mogłoby się wydawać na pierwszy rzut oka. Inne odpowiedzi wymieniają makro print!
, ale nie jest to takie proste. Najprawdopodobniej będziesz musiał wypróżnić standardowe wyjście, ponieważ może nie zostać natychmiast zapisany na ekranie. flush()
to cecha, która jest częścią std::io::Write
, więc musi być w zasięgu, aby działał (jest to dość łatwy wczesny błąd).
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);
}
"* Zauważ, że standardowe wyjście jest często buforowane liniowo, więc może być konieczne użycie' io :: stdout(). Flush() ', aby upewnić się, że wyjście zostanie natychmiast wysłane. *" - https: //doc.rust-lang.org/std/macro.print!.html – ArtemGr
@ArtemGr: W C++ (i CI think), podczas próby odczytu z 'stdin', bufor' stdout' jest natychmiast płukany. Spodziewałbym się (może błędnie) takiego samego zachowania od Rusta, a przykład przedstawiony na stronie 'print!' Nie odczytuje z 'stdin', więc nie jest jednoznaczny pod tym względem ... czy masz więcej informacji? –
@ MatthieuM. Zrobiłem prosty test na Windowsie i Linuksie z Rustem i nie było ** żadnego stdoutowego koloru ** występującego w kodzie odpowiedzi, np. "Enter the number:" jest drukowane ** po zakończeniu programu **, a nie przed pojawieniem się 'read_line'. – ArtemGr