阅读部分行

时间:2015-07-08 14:44:01

标签: input console rust

我对Rust很陌生,实际上刚刚开始。 (对于那些看过我之前删除的问题的人,你有最诚挚的道歉。)

我只是想构建一个简单的应用程序来提高我的技能,但我遇到了一个问题。我喜欢创造一些你可以输入东西的东西,对于那些知道dunnet的人来说,每条线路都有两个大于标志的东西。

但我还没有真正发现如何在两个标志后读取这些位。我在谷歌和StackOverflow上搜索过,但这是我得到的最好的:

//Starting a line
fn start(){print!(">>");}

//Seeking input and saving input
fn line_init() -> String
{
    use std::io;
    use std::io::BufRead;
    start();
    let mut input = String::new();
    let stdin = io::stdin();
    stdin.lock().read_line(&mut input).unwrap();
    input
}

//Main function
fn main() {
    loop
    {
        print!("{}", line_init());
    }
}

但是当然,用户输入线落在一条新线上,这不是我想要的。这是我想要的C ++版本(实际上,我只是在Rust中复制我的C ++项目):

cout << ">>";
string input;
getline(cin, input);

很抱歉这篇文章有点长了!

1 个答案:

答案 0 :(得分:0)

您是说用户在控制台上看到类似以下内容的内容吗?

hello
>>

而不是

>> hello

在这种情况下,问题是默认情况下Rust stdout是行缓冲的,所以除非你写一个换行符,否则什么都不会打印到控制台。

您需要在写入行前缀后刷新标准输出:

fn start(){
    print!(">>");
    io::stdout().flush().unwrap();
}