Как напечатать STDOUT и получить STDIN на той же строке в Rust?

Я не уверен, что это будет полезно, потому что я не знаю, какова конкретная проблема, но может быть, что ваш второй поток не может потреблять значения, потому что вы помещаете часть «потреблять» кода в ветке else, который поток в состоянии ожидания никогда не будет запущен, потому что они находятся в ветке if? Вы должны поместить «потреблять» часть своего кода за пределы else, таким образом, после выхода из состояния ожидания они могут «потреблять» значения.

3
задан Shepmaster 20 January 2019 в 03:42
поделиться

2 ответа

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");
}
0
ответ дан belst 20 January 2019 в 03:42
поделиться

вы должны иметь возможность записывать вывод и получать ввод в одной строке.

В stdin и stdout нет понятия «одна и та же линия». Есть просто другой поток, если вы хотите выполнить манипулирование терминалом, вы должны использовать что-то, что обрабатывает терминал, например console .

В Python (3.x) это можно сделать одной строкой, потому что функция ввода допускает строковый аргумент, предшествующий приглашению STDIN: variable = input("Output string")

[1110 ] Ну вот, пожалуйста:

use dialoguer::Input;

let name = Input::new().with_prompt("Your name").interact()?;
println!("Name: {}", name);
0
ответ дан Stargateur 20 January 2019 в 03:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: