Chcę uruchomić plik wykonywalny, który blokuje się na standardowym wejściu, a po naciśnięciu klawisza ten sam znak jest drukowany natychmiast, bez konieczności ponownej próby wpisania .Jak mogę odczytać jedną postać ze stdin bez konieczności wciskania enter?
Jak mogę odczytać jedną postać ze stdin bez konieczności uderzania Wpisz? Zacząłem od tego przykładu:
fn main() {
println!("Type something!");
let mut line = String::new();
let input = std::io::stdin().read_line(&mut line).expect("Failed to read line");
println!("{}", input);
}
Spojrzałem za pośrednictwem interfejsu API i próbował zastępując read_line()
z bytes()
, ale wszystko staram wymaga mnie uderzyć Wprowadź zanim dojdzie do odczytu.
To pytanie został poproszony o C/C++, ale nie wydaje się być nie standardowy sposób to zrobić: Capture characters from standard input without waiting for enter to be pressed
To może nie być wykonalne w Rust rozważa to nie jest proste w C/C++.
Jest to problem dotyczący platformy, a nie języka. W oknach dostępne są funkcje wprowadzania znaków, ale na systemie unix/linux trzeba wyjść z trybu buforowania linii. –
Możesz użyć funkcji 'getch' ze wspomnianego łącza SO. Musisz tylko skompilować to w obiekt współdzielony i użyć go z Rust: https://gist.github.com/ihrwein/a4558d63d9250ee0bbf6 Będziesz potrzebował kompilatora C i działa on tylko na Linuksie (przynajmniej testowałem go tam) . –