- Rust 教程
- Rust - 首页
- Rust - 简介
- Rust - 环境搭建
- Rust - HelloWorld 示例
- Rust - 数据类型
- Rust - 变量
- Rust - 常量
- Rust - 字符串
- Rust - 运算符
- Rust - 决策
- Rust - 循环
- Rust - 函数
- Rust - 元组
- Rust - 数组
- Rust - 所有权
- Rust - 借用
- Rust - 切片
- Rust - 结构体
- Rust - 枚举
- Rust - 模块
- Rust - 集合
- Rust - 错误处理
- Rust - 泛型
- Rust - 输入输出
- Rust - 文件输入/输出
- Rust - 包管理器
- Rust - 迭代器和闭包
- Rust - 智能指针
- Rust - 并发
- Rust 有用资源
- Rust - 快速指南
- Rust - 有用资源
- Rust - 讨论
Rust - 输入输出
本章讨论如何从标准输入(键盘)接受值并向标准输出(控制台)显示值。在本章中,我们还将讨论传递命令行参数。
读取器和写入器类型
Rust 的标准库中用于输入和输出的功能围绕两个特征组织:
- 读取
- 写入
序号 | 特征 & 描述 | 示例 |
---|---|---|
1 | 读取 实现 Read 的类型具有面向字节的输入方法。它们被称为读取器。 | 标准输入,文件 |
2 | 写入 实现 Write 的类型支持面向字节和 UTF-8 文本输出。它们被称为写入器。 | 标准输出,文件 |
Read 特征
读取器是程序可以从中读取字节的组件。例如,从键盘、文件等读取输入。此特征的 read_line() 方法可用于一次读取一行数据,来自文件或标准输入流。
序号 | 特征 | 方法 & 描述 |
---|---|---|
1 | 读取 | read_line(&mut line)->Result 读取一行文本并将其附加到 line,line 是一个字符串。返回值是 io::Result,读取的字节数。 |
示例 - 从控制台读取 - stdin()
Rust 程序可能需要在运行时接受用户的输入。以下示例从标准输入(键盘)读取值并将其打印到控制台。
fn main(){ let mut line = String::new(); println!("Enter your name :"); let b1 = std::io::stdin().read_line(&mut line).unwrap(); println!("Hello , {}", line); println!("no of bytes read , {}", b1); }
stdin() 函数返回当前进程的标准输入流的句柄,read_line 函数可以应用于该句柄。此函数尝试在遇到换行符时读取输入缓冲区中存在的所有字符。
输出
Enter your name : Mohtashim Hello , Mohtashim no of bytes read , 10
Write 特征
写入器是程序可以向其写入字节的组件。例如,将值打印到控制台,写入文件等。此特征的 write() 方法可用于将数据写入文件或标准输出流。
序号 | 特征 | 方法 & 描述 |
---|---|---|
1 | 写入 | write(&buf)->Result 将切片 buf 中的一些字节写入底层流。它返回 io::Result,写入的字节数。 |
示例 - 写入控制台 - stdout()
print! 或 println! 宏可用于在控制台上显示文本。但是,您也可以使用 write() 标准库函数将一些文本显示到标准输出。
让我们考虑一个示例来理解这一点。
use std::io::Write; fn main() { let b1 = std::io::stdout().write("Tutorials ".as_bytes()).unwrap(); let b2 = std::io::stdout().write(String::from("Point").as_bytes()).unwrap(); std::io::stdout().write(format!("\nbytes written {}",(b1+b2)).as_bytes()).unwrap(); }
输出
Tutorials Point bytes written 15
stdout() 标准库函数返回当前进程的标准输出流的句柄,write 函数可以应用于该句柄。write() 方法返回一个枚举,Result。unwrap() 是一个辅助方法,用于从枚举中提取实际结果。如果发生错误,unwrap 方法将发送 panic。
注意 - 文件 IO 在下一章中讨论。
命令行参数
命令行参数在执行程序之前传递给程序。它们就像传递给函数的参数。命令行参数可用于将值传递给 main() 函数。std::env::args() 返回命令行参数。
示例
以下示例将值作为命令行参数传递给 main() 函数。程序在名为 main.rs 的文件中创建。
//main.rs fn main(){ let cmd_line = std::env::args(); println!("No of elements in arguments is :{}",cmd_line.len()); //print total number of values passed for arg in cmd_line { println!("[{}]",arg); //print all values passed as commandline arguments } }
编译后,程序将生成一个名为 main.exe 的文件。多个命令行参数应以空格分隔。从终端执行 main.exe,例如 main.exe hello tutorialspoint。
注意 - hello 和 tutorialspoint 是命令行参数。
输出
No of elements in arguments is :3 [main.exe] [hello] [tutorialspoint]
输出显示 3 个参数,因为 main.exe 是第一个参数。
示例
以下程序计算作为命令行参数传递的值之和。将以空格分隔的整数列表传递给程序。
fn main(){ let cmd_line = std::env::args(); println!("No of elements in arguments is :{}",cmd_line.len()); // total number of elements passed let mut sum = 0; let mut has_read_first_arg = false; //iterate through all the arguments and calculate their sum for arg in cmd_line { if has_read_first_arg { //skip the first argument since it is the exe file name sum += arg.parse::<i32>().unwrap(); } has_read_first_arg = true; // set the flag to true to calculate sum for the subsequent arguments. } println!("sum is {}",sum); }
在执行程序 main.exe 1 2 3 4 时,输出将为:
No of elements in arguments is :5 sum is 10