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 用法总结

相关推荐
赵瑽瑾3 分钟前
Lua语言的嵌入式系统
开发语言·后端·golang
霍璟琅4 分钟前
Delphi语言的数据可视化
开发语言·后端·golang
funsion6 分钟前
Lua中文语言编程源码-第十一节,其它小改动汉化过程
c语言·开发语言·中文分词·lua
NPE~44 分钟前
[渗透测试]热门搜索引擎推荐— — fofa篇
开发语言·搜索引擎·渗透测试·php·教程·软件推荐·fofa
霍熠烁1 小时前
Objective-C语言的云计算
开发语言·后端·golang
WANGWUSAN661 小时前
Python教程:使用Matplotlib模块画柱状图、饼形图、直方图
开发语言·经验分享·python·程序人生·matplotlib·数据可视化
卓怡学长1 小时前
w200基于spring boot的个人博客系统的设计与实现
java·数据库·spring boot·后端·spring·intellij-idea
饮长安千年月1 小时前
CVE-2024-13025-Codezips 大学管理系统 faculty.php sql 注入分析及拓展
开发语言·数据库·sql·网络安全·php
115432031q2 小时前
基于SpringBoot养老院平台系统功能实现十一
java·前端·后端
计算机视觉-Archer2 小时前
[NKU]C++安装环境 VScode
开发语言·c++