编者注:这个问题是指在Rust 1.0之前的Rust部分,但是一般概念在Rust 1.0中仍然有效.
我打算制作一个标记器.我需要阅读用户键入的每一行,并在用户按下后停止阅读ctrl- D.
我四处搜索,只在Rust IO上找到了一个甚至没有编译的例子.我查看了io模块的文档,发现该read_line()函数是ReaderUtil界面的一部分,但stdin()返回了一个Reader.
我想要的代码在C++中基本上如下所示
vector<string> readLines () {
vector<string> allLines;
string line;
while (cin >> line) {
allLines.push_back(line);
}
return allLines;
}
Run Code Online (Sandbox Code Playgroud)
rob*_*nst 143
Rust 1.x(参见文档):
use std::io;
use std::io::prelude::*;
fn main() {
let stdin = io::stdin();
for line in stdin.lock().lines() {
println!("{}", line.unwrap());
}
}
Run Code Online (Sandbox Code Playgroud)
Rust 0.10-0.12(见文档):
use std::io;
fn main() {
for line in io::stdin().lines() {
print!("{}", line.unwrap());
}
}
Run Code Online (Sandbox Code Playgroud)
Rust 0.9(参见0.9文档):
use std::io;
use std::io::buffered::BufferedReader;
fn main() {
let mut reader = BufferedReader::new(io::stdin());
for line in reader.lines() {
print(line);
}
}
Run Code Online (Sandbox Code Playgroud)
锈0.8:
use std::io;
fn main() {
let lines = io::stdin().read_lines();
for line in lines.iter() {
println(*line);
}
}
Run Code Online (Sandbox Code Playgroud)
锈0.7:
use std::io;
fn main() {
let lines = io::stdin().read_lines();
for lines.iter().advance |line| {
println(*line);
}
}
Run Code Online (Sandbox Code Playgroud)
gai*_*epr 13
截至2015年4月17日,来自mdcoxmozilla rust irc.
use std::io;
fn main() {
let mut stdin = io::stdin();
let input = &mut String::new();
loop {
input.clear();
stdin.read_line(input);
println!("{}", input);
}
}
Run Code Online (Sandbox Code Playgroud)
在 Rust 0.4 中,使用ReaderUtilTrait 来访问read_line函数。请注意,您需要显式地将值转换为特征类型,例如reader as io::ReaderUtil:
fn main() {
let mut allLines = ~[];
let reader = io::stdin();
while !reader.eof() {
allLines.push((reader as io::ReaderUtil).read_line());
}
for allLines.each |line| {
io::println(fmt!("%s", *line));
}
}
Run Code Online (Sandbox Code Playgroud)
这个答案早于 Rust 1.0。请参阅现代解决方案的其他答案。