如何从标准输入中读取单个字符串?

How do I read a single String from standard input?

std::io documentation 中没有关于接收字符串作为变量的直接说明,但我认为这应该有效:

use std::io;
let line = io::stdin().lock().lines().unwrap();

但是我收到这个错误:

src\main.rs:28:14: 28:23 error: unresolved name `io::stdin`
src\main.rs:28          let line = io::stdin.lock().lines().unwrap();
                                   ^~~~~~~~~

为什么?

我正在使用 nightly Rust v1.0。

这是你需要做的代码(如果它是一个好的方法,没有评论:

use std::io::{self, BufRead};

fn main() {
    let stdin = io::stdin();
    let line = stdin.lock()
        .lines()
        .next()
        .expect("there was no next line")
        .expect("the line could not be read");
}

如果您想更好地控制行的读取位置,可以使用 Stdin::read_line。这接受一个 &mut String 附加到。有了这个,你可以确保字符串有足够大的缓冲区,或者追加到一个现有的字符串:

use std::io::{self, BufRead};

fn main() {
    let mut line = String::new();
    let stdin = io::stdin();
    stdin.lock().read_line(&mut line).expect("Could not read line");
    println!("{}", line)
}