Я не уверен, что это будет полезно, потому что я не знаю, какова конкретная проблема, но может быть, что ваш второй поток не может потреблять значения, потому что вы помещаете часть «потреблять» кода в ветке else, который поток в состоянии ожидания никогда не будет запущен, потому что они находятся в ветке if? Вы должны поместить «потреблять» часть своего кода за пределы else, таким образом, после выхода из состояния ожидания они могут «потреблять» значения.
stdout
вспыхивает на новых строках. Поскольку ваш оператор print!
не содержит и не заканчивается новой строкой, он не будет сброшен. Вам нужно сделать это вручную, используя std::io::stdout().flush()
Например
use std::io::{self, Write};
fn main() {
let mut input = String::new();
print!("Enter a string >> ");
let _ = io::stdout().flush();
io::stdin().read_line(&mut input).expect("Error reading from STDIN");
}
вы должны иметь возможность записывать вывод и получать ввод в одной строке.
blockquote>В
stdin
иstdout
нет понятия «одна и та же линия». Есть просто другой поток, если вы хотите выполнить манипулирование терминалом, вы должны использовать что-то, что обрабатывает терминал, например console .В Python (3.x) это можно сделать одной строкой, потому что функция ввода допускает строковый аргумент, предшествующий приглашению STDIN:
blockquote> [1110 ] Ну вот, пожалуйста:variable = input("Output string")
use dialoguer::Input; let name = Input::new().with_prompt("Your name").interact()?; println!("Name: {}", name);