Rust - 输入输出
本章讨论如何从标准输入(键盘)接受值并将值显示到标准输出(控制台)。 在本章中,我们还将讨论传递命令行参数。
读取器和写入器类型
Rust 的输入和输出标准库功能围绕两个特征进行组织 −
- Read
- Write
Sr.No | 特征 & 描述 | 示例 |
---|---|---|
1 | Read 实现 Read 的类型具有面向字节输入的方法。 他们被称为读 | Stdin,File |
2 | Write 实现 Write 的类型支持面向字节和 UTF-8 文本输出。 他们被称为写。 | Stdout,File |
读取特征
读取器是您的程序可以从中读取字节的组件。 示例包括从键盘、文件等读取输入。此特征的 read_line() 方法可用于从文件或标准输入流读取数据,一次一行。
Sr.No | 特征 | 方法 & 描述 |
---|---|---|
1 | Read | read_line(&mut line)->Result 读取一行文本并将其附加到 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() 方法可用于将数据写入文件或标准输出流。
Sr.No | 特征 | 方法 & 描述 |
---|---|---|
1 | Write | 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()); // 打印传递的值总数 for arg in cmd_line { println!("[{}]",arg); //打印作为命令行参数传递的所有值 } }
程序编译后将生成一个文件main.exe。 多个命令行参数应以空格分隔。 从终端以 main.exe hello Tutorialspoint 的形式执行 main.exe。
注意 − 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()); // 传递的元素总数 let mut sum = 0; let mut has_read_first_arg = false; //迭代所有参数并计算它们的总和 for arg in cmd_line { if has_read_first_arg { // 跳过第一个参数,因为它是 exe 文件名 sum += arg.parse::<i32>().unwrap(); } has_read_first_arg = true; // 将标志设置为 true 以计算后续参数的总和。 } println!("sum is {}",sum); }
作为 main.exe 1 2 3 4 执行程序时,输出将为 −
No of elements in arguments is :5 sum is 10