如何从标准输入中读取单个字符串?
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)
}
在 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)
}