2016-05-30 19 views
10

Rust'taki println! makrosu, her çıktı sonunda her zaman yeni satır karakteri bırakır. ÖrneğinRust'taki son satır olmadan çıktıyı nasıl yazdırırım?

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

çıkışı

Enter the number : 
56 

Ben yeni bir satıra olmak için kullanıcının girişini 56 istemiyoruz verir. Bunu nasıl yaparım?

cevap

11

Bunun yerine print! macro'u kullanabilirsiniz.

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

Dikkat: stdout'u o çıktı hemen yayılan sağlamak için io::stdout().flush() kullanmak gerekli olabilir bu yüzden sık sık varsayılan olarak satır tamponlu olduğunu

Not.

+11

"o' kullanmak gerekli olabilir bu yüzden * o stdout'u Not sıkça varsayılan olarak satır tamponlu edilir io :: stdout'u() floş() 'çıkışı hemen yayılan sağlamak için *.." - https: //doc.rust-lang.org/std/macro.print!.html – ArtemGr

+0

@ArtemGr: C++ (ve CI düşüncesinde), stdin'den okumaya çalıştığınızda, "stdout" tamponu hemen temizlenir. Rust'tan aynı davranışı (belki de yanlış) beklerdim ve “print!” Sayfasında sunulan örnek “stdin” den okumaz, bu yüzden bu konuda yetersizdir ... daha fazla bilgiye sahip misiniz? –

+0

@MatthieuM. Windows ve Linux'ta Rust ile gece boyunca basit bir test yaptım ve ** kodunda cevapsız bir ** oluğu var. "Numarayı girin:", program bittikten sonra ** yazılır ** ve "read_line" gerçekleşmeden önce. – ArtemGr

5

İlk bakışta göründüğünden daha zor. Diğer cevaplar, print! makalesinden söz ediyor ancak bu kadar basit değil. Ekrana hemen yazılmayacağı için muhtemelen stdout'u boşaltmanız gerekir. flush(), std::io::Write'un bir parçası olan bir özelliktir, bu yüzden çalışması için kapsamda olması gerekir (bu oldukça kolay erken bir hatadır).

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); 
} 
İlgili konular