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

news/2025/2/8 8:40:16/

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

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

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻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在命令行应用程序中尤为重要,能够捕捉用户输入并处理它。

  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.通用语法:
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) 会持续读取标准输入的数据,直到输入流结束。
适用于需要处理大量文本或读取整个文件内容的场景。

🐓3.4 用法总结

在这里插入图片描述


http://www.ppmy.cn/news/1570286.html

相关文章

学习TCL脚本的几个步骤?

文章目录 前言一、第一步&#xff1a;了解 Tcl 基础二、第二步&#xff1a;掌握基本语法1. 命令和参数2. 变量3. 控制结构4. 列表和字典 三、第三步&#xff1a;深入学习高级特性1. 过程&#xff08;Procedures&#xff09;2. 错误处理3. 文件操作4. 模块和包 四、第四步&#…

快速提取Excel工作簿中所有工作表的名称?

大家好&#xff0c;我是小鱼。 在Excel表格中如何快速提取工作簿中所有工作表的名称&#xff1f;这个问题在日常工作中也经常遇到&#xff0c;比如说经常使用的INDIRECT函数跨工作表汇总或者制作类似于导航的工作表快捷跳转列表&#xff0c;就需要每个工作表的名称。如果工作表…

DeepSeek 引发 AI 大模型战火,编程语言群雄激战谁夺胜利权杖?

随着人工智能领域的飞速发展&#xff0c;AI 大模型如璀璨星辰般不断涌现&#xff0c;DeepSeek 作为其中备受瞩目的一员&#xff0c;凭借其强大的性能和广泛的应用潜力吸引了众多关注。在大模型的开发与应用过程中&#xff0c;编程语言的选择起着至关重要的作用。 博主主页&…

基于机器学习时序库pmdarima实现时序预测

目录 一、Pmdarima实现单变量序列预测1.1 核心功能与特性1.2 技术优势对比1.3 python案例1.3.1 时间序列交叉验证1.3.1.1 滚动交叉验证1.3.1.2 滑窗交叉验证 时间序列相关参考文章&#xff1a; 时间序列预测算法—ARIMA 基于机器学习时序库pmdarima实现时序预测 时间序列预测算…

哪些专业跟FPGA有关?

FPGA产业作为近几年新兴的技术领域&#xff0c;薪资高、待遇好&#xff0c;吸引了大量的求职者。特别是对于毕业生&#xff0c;FPGA领域的岗位需求供不应求。那么&#xff0c;哪些专业和FPGA相关呢&#xff1f; 哪些专业跟FPGA有关&#xff1f; 微电子学与固体电子学、微电子科…

基于LMStudio本地部署DeepSeek R1

DeepSeek R1 DeepSeek R1是由DeepSeek团队开发的一款高性能AI推理模型&#xff0c;其开源版本包括完整的DeepSeek R1 671B权重&#xff0c;以及基于其蒸馏出的多个小型模型。 DeepSeek R1通过蒸馏技术将推理模式迁移到更小的模型中&#xff0c;显著提升了这些模型的推理能力。…

windows 蓝牙驱动开发-传输总线驱动程序常见问题

以下是驱动程序开发人员在开发总线驱动程序以支持蓝牙功能时可能会遇到的一些常见问题和方案。 我的串行总线驱动程序遇到了一些错误。 它意味着什么&#xff1f; 代码 10-49&#xff1a;设备管理器生成的错误代码。 代码 51&#xff1a;当串行总线驱动程序具有相关的控制器…

分析用户请求K8S里ingress-nginx提供的ingress流量路径

前言 本文是个人的小小见解&#xff0c;欢迎大佬指出我文章的问题&#xff0c;一起讨论进步~ 我个人的疑问点 进入的流量是如何自动判断进入iptables的四表&#xff1f;k8s nodeport模式的原理&#xff1f; 一 本机环境介绍 节点名节点IPK8S版本CNI插件Master192.168.44.1…