简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者
新书发布:《Android系统多媒体进阶实战》🚀
优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀
优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
🍉🍉🍉文章目录🍉🍉🍉
- 🌻1.前言
- 🌻2. Rust之stdin介绍
- 🌻3. 代码实例
- 🐓3.1 从标准输入读取单行数据
- 🐓3.2 从标准输入读取多个值并解析
- 🐓3.3 使用 stdin 读取直到结束
- 🐓3.4 用法总结
🌻1.前言
本篇目的:Rust语言进阶之标准输入:stdin用法实例
🌻2. Rust之stdin介绍
stdin
是Rust标准库中std::io
模块的一部分,代表了程序的标准输入流。它提供了对来自用户或其他输入源的数据的访问方式,允许开发者从控制台或其他标准输入设备读取数据。stdin
在命令行应用程序中尤为重要,能够捕捉用户输入并处理它。
-
读取用户输入
stdin
的主要功能是从标准输入设备(通常是键盘)中读取数据。通过stdin
,开发者可以在运行时捕获用户输入,这对于交互式命令行程序或工具非常关键。stdin
与read_line
等方法结合使用,可以获取用户输入的整行内容并进行处理。 -
支持多种读取方式
stdin
不仅支持按行读取,还可以通过其他方法读取字节流或字符流。开发者可以使用不同的读取方法来满足具体的需求。例如,read
方法可以读取字节流,而read_to_string
方法则将输入读取到一个字符串中。通过灵活的接口,stdin
可以适应各种类型的数据输入。 -
缓冲读取
stdin
通过缓冲区来提高读取操作的效率。与直接读取硬件设备相比,缓冲机制能够减少I/O操作的次数,提升性能。Rust的stdin
在默认情况下使用缓冲区来优化输入操作,避免每次读取都与设备进行交互,从而提高程序的响应速度和效率。 -
与
BufReader
结合使用
stdin
可以与BufReader
结合使用,以便在读取数据时更高效地处理输入流。BufReader
对stdin
进行包装,可以提供更为高效的批量读取功能,尤其是当需要从标准输入读取大量数据时。通过缓冲区管理,BufReader
能够大幅减少I/O操作的开销,提升读取性能。 -
适用于交互式命令行程序
stdin
是开发交互式命令行程序的重要工具。它允许开发者在运行时获取实时输入,以响应用户的命令或数据请求。无论是输入命令、查询参数,还是用户输入的动态数据,stdin
都能够处理并提供程序所需的信息。
🌻3. 代码实例
🐓3.1 从标准输入读取单行数据
- 1.应用场景:stdin 的最常见用法是从标准输入读取一行数据。通常用于用户交互或命令行工具,读取并处理用户输入。
- 2.通用语法:
use std::io::{self, Write};
let mut input = String::new();
io::stdin().read_line(&mut input)?;
- 3.用法实例
use std::io::{self, Write};
fn main() -> io::Result<()> {
print!("请输入你的名字: ");
io::stdout().flush()?; // 确保输出被立刻显示
let mut name = String::new();
io::stdin().read_line(&mut name)?; // 读取用户输入
println!("你好, {}!", name.trim());
Ok(())
}
io::stdin().read_line(&mut name) 读取一行输入并存储在 name 变量中。
trim() 用于去掉输入中的多余换行符或空格。
🐓3.2 从标准输入读取多个值并解析
- 1.应用场景:当用户输入多个数据项时,可以从标准输入读取并解析为多个值。这种用法常见于处理用户输入的数字、逗号分隔的字符串等。
- 2.通用语法:
use std::io::{self, Write};
let mut input = String::new();
io::stdin().read_line(&mut input)?;
let values: Vec<&str> = input.split_whitespace().collect();
- 3.用法实例
use std::io::{self, Write};
fn main() -> io::Result<()> {
print!("请输入两个数字,用空格分隔: ");
io::stdout().flush()?; // 确保输出被立刻显示
let mut input = String::new();
io::stdin().read_line(&mut input)?; // 读取用户输入
let numbers: Vec<i32> = input
.split_whitespace() // 按空格分割输入
.map(|s| s.parse().unwrap()) // 解析为整数
.collect();
println!("你输入的数字是: {:?}", numbers);
Ok(())
}
split_whitespace() 将输入按空格分隔,生成多个子字符串。
map(|s| s.parse().unwrap()) 将每个子字符串解析为整数。
🐓3.3 使用 stdin 读取直到结束
- 1.应用场景:当你需要从标准输入读取所有数据直到输入流结束时,可以使用 stdin 来实现。这种用法在处理文件输入流或长时间等待输入时非常有用。
- 2.通用语法:
use std::io::{self, Read};
let mut input = String::new();
io::stdin().read_to_string(&mut input)?;
- 3.用法实例
use std::io::{self, Read};
fn main() -> io::Result<()> {
print!("请输入多行文本,按 Ctrl+D (Unix) 或 Ctrl+Z (Windows) 结束输入: ");
io::stdout().flush()?; // 确保输出被立刻显示
let mut input = String::new();
io::stdin().read_to_string(&mut input)?; // 读取所有输入
println!("你输入的内容是:\n{}", input);
Ok(())
}
io::stdin().read_to_string(&mut input) 会持续读取标准输入的数据,直到输入流结束。
适用于需要处理大量文本或读取整个文件内容的场景。