Rust语言进阶之标准输入: stdin用法实例(一百零五)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者

新书发布:《Android系统多媒体进阶实战》🚀
优质专栏:Audio工程师进阶系列原创干货持续更新中...... 】🚀
优质专栏:多媒体系统工程师系列原创干货持续更新中...... 】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
更多原创,欢迎关注:Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • [🌻2. Rust之stdin介绍](#🌻2. Rust之stdin介绍)
    • [🌻3. 代码实例](#🌻3. 代码实例)
      • [🐓3.1 从标准输入读取单行数据](#🐓3.1 从标准输入读取单行数据)
      • [🐓3.2 从标准输入读取多个值并解析](#🐓3.2 从标准输入读取多个值并解析)
      • [🐓3.3 使用 stdin 读取直到结束](#🐓3.3 使用 stdin 读取直到结束)
      • [🐓3.4 用法总结](#🐓3.4 用法总结)

🌻1.前言

本篇目的:Rust语言进阶之标准输入:stdin用法实例

🌻2. Rust之stdin介绍

stdin是Rust标准库中std::io模块的一部分,代表了程序的标准输入流。它提供了对来自用户或其他输入源的数据的访问方式,允许开发者从控制台或其他标准输入设备读取数据。stdin在命令行应用程序中尤为重要,能够捕捉用户输入并处理它。

  1. 读取用户输入
    stdin的主要功能是从标准输入设备(通常是键盘)中读取数据。通过stdin,开发者可以在运行时捕获用户输入,这对于交互式命令行程序或工具非常关键。stdinread_line等方法结合使用,可以获取用户输入的整行内容并进行处理。

  2. 支持多种读取方式
    stdin不仅支持按行读取,还可以通过其他方法读取字节流或字符流。开发者可以使用不同的读取方法来满足具体的需求。例如,read方法可以读取字节流,而read_to_string方法则将输入读取到一个字符串中。通过灵活的接口,stdin可以适应各种类型的数据输入。

  3. 缓冲读取
    stdin通过缓冲区来提高读取操作的效率。与直接读取硬件设备相比,缓冲机制能够减少I/O操作的次数,提升性能。Rust的stdin在默认情况下使用缓冲区来优化输入操作,避免每次读取都与设备进行交互,从而提高程序的响应速度和效率。

  4. BufReader结合使用
    stdin可以与BufReader结合使用,以便在读取数据时更高效地处理输入流。BufReaderstdin进行包装,可以提供更为高效的批量读取功能,尤其是当需要从标准输入读取大量数据时。通过缓冲区管理,BufReader能够大幅减少I/O操作的开销,提升读取性能。

  5. 适用于交互式命令行程序
    stdin是开发交互式命令行程序的重要工具。它允许开发者在运行时获取实时输入,以响应用户的命令或数据请求。无论是输入命令、查询参数,还是用户输入的动态数据,stdin都能够处理并提供程序所需的信息。

🌻3. 代码实例

🐓3.1 从标准输入读取单行数据

  • 1.应用场景:stdin 的最常见用法是从标准输入读取一行数据。通常用于用户交互或命令行工具,读取并处理用户输入。
  • 2.通用语法:
cpp 复制代码
use std::io::{self, Write};

let mut input = String::new();
io::stdin().read_line(&mut input)?;
  • 3.用法实例
cpp 复制代码
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.通用语法:
cpp 复制代码
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.用法实例
cpp 复制代码
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.通用语法:
cpp 复制代码
use std::io::{self, Read};

let mut input = String::new();
io::stdin().read_to_string(&mut input)?;
  • 3.用法实例
cpp 复制代码
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) 会持续读取标准输入的数据,直到输入流结束。

适用于需要处理大量文本或读取整个文件内容的场景。

🐓3.4 用法总结

相关推荐
紫荆鱼6 分钟前
设计模式-代理模式(Proxy)
c++·后端·设计模式·代理模式
调试人生的显微镜21 分钟前
Web 开发的工具全攻略 一套高效、实用、可落地的前端工作体系
后端
李辉200326 分钟前
Python简介及Pycharm
开发语言·python·pycharm
赵谨言27 分钟前
基于python大数据的城市扬尘数宇化监控系统的设计与开发
大数据·开发语言·经验分享·python
Yurko1327 分钟前
【C语言】程序控制结构
c语言·开发语言·学习
zhangfeng113338 分钟前
R和python 哪个更适合生物信息分析,或者更擅长做什么工作
开发语言·python·r语言·生物信息
非凡ghost44 分钟前
Affinity Photo(图像编辑软件) 多语便携版
前端·javascript·后端
听情歌落俗1 小时前
c++通讯录管理系统
开发语言·c++·算法
非凡ghost1 小时前
VideoProc Converter AI(视频转换软件) 多语便携版
前端·javascript·后端
Peace & Love4871 小时前
C++初阶 -- 模拟实现list
开发语言·c++·笔记