2016-05-30 12 views

Odpowiedz

11

Zamiast tego można użyć numeru print! macro.

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

Uwaga:

Zauważ, że stdout jest często linia buforowana domyślnie, więc może być konieczne użycie io::stdout().flush() aby zapewnić wyjście jest emitowany natychmiast.

+11

"* 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

+0

@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? –

+0

@ 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

5

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); 
} 
Powiązane problemy