编者注:这个问题是指在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) 在std :: io文档中没有直接接收字符串作为变量的指令,但我认为这应该有效:
use std::io;
let line = io::stdin().lock().lines().unwrap();
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误:
src\main.rs:28:14: 28:23 error: unresolved name `io::stdin`
src\main.rs:28 let line = io::stdin.lock().lines().unwrap();
^~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
为什么?
我正在使用每晚的Rust v1.0.
我想将此 Python 代码转换为 Rust:
for line in sys.stdin:
do something to the whole line including \n
Run Code Online (Sandbox Code Playgroud)
但我只能找到读取单个整行(包括\n)的示例或不读取\n.
看起来这应该是世界上最简单的,但我一直找不到它。
我最近学习了如何使用ioRust文档读取输入,但有没有" 简单 "的方法来读取控制台输入?我的根源是大量挖掘C++,所以从控制台获取输入就像这样简单std::cin >> var.但在Rust,我正在做:
for line in io::stdin().lines() {
print!("{}", line.unwrap());
break;
}
Run Code Online (Sandbox Code Playgroud)
这会读取一次输入,但for循环似乎是一种非常笨拙的方法来实现这一点.我怎么能轻松做到这一点?