Ce face io::stdout
println! scrie deja în ieșirea standard. io::stdout() îți dă acces direct la ea, ca obiect care implementează Write: poți folosi write!/writeln!, write_all și mai ales flush().
Ieșirea standard este scrisă pe linii: textul fără \n (de la print!) poate rămâne în memorie. io::stdout().flush() îl trimite imediat, ceea ce e necesar când afișezi o întrebare pe aceeași linie cu răspunsul.
io::stdout().lock() blochează ieșirea pentru firul curent și dă un StdoutLock; dacă scrii mii de linii, e mult mai rapid decât println! repetat, care face lock la fiecare apel. Pentru erori există io::stderr().
Ce returnează
Un Stdout.
Exemple
Exemplul 1: Întrebare pe aceeași linie cu răspunsul
Fără flush(), textul „Oraș: ” ar putea apărea abia după ce utilizatorul a scris răspunsul.
use std::io::{self, Write};
fn main() -> io::Result<()> {
print!("Oraș: ");
io::stdout().flush()?;
let mut oras = String::new();
io::stdin().read_line(&mut oras)?;
println!();
println!("Livrăm în {}.", oras.trim());
Ok(())
}
Ce scrie utilizatorul (intrare)
Brașov
Rezultat
Oraș:
Livrăm în Brașov.
Exemplul 2: Scriere rapidă prin lock
use std::io::{self, Write};
fn main() -> io::Result<()> {
let mut iesire = io::stdout().lock();
writeln!(iesire, "Tabla înmulțirii cu 7:")?;
for i in 1..=5 {
writeln!(iesire, "7 x {i} = {}", 7 * i)?;
}
iesire.write_all(b"gata\n")?;
Ok(())
}
Rezultat
Tabla înmulțirii cu 7:
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
gata
Greșeli frecvente
- Uiți
use std::io::Write: metodaflushnu este găsită. - Afișezi mesajele de eroare tot pe
stdout: dacă cineva redirecționează ieșirea într-un fișier, nu mai vede erorile. Foloseșteeprintln!sauio::stderr().
Comenzi înrudite
io::stdin: Intrarea standard (tastatura): read_line citește o linie și o adaugă la un String, inclusiv caracterul de linie nouă.io::Write: Trait-ul oricărei destinații de octeți: write_all scrie tot bufferul, flush golește memoria tampon; permite write!.io::BufWriter: Adaugă un buffer peste orice scriitor: strânge scrierile mici și le trimite în bucăți mari, mult mai rapid.