Rust 输入输出

Rust 输入输出

本章讨论如何从标准输入(键盘)接收值并将值显示到标准输出(控制台)。在本章中,我们还将讨论传递命令行参数。

读取器和写入器类型

Rust的标准库输入输出功能是围绕两个特性组织的−

  • 读取(Read)
  • 写入(Write)
序号 特性 & 描述 示例
1 读取 实现Read特性的类型具有以字节为导向的输入方法。它们被称为读取者。 标准输入,文件
2 写入 实现Write特性的类型支持以字节为导向的和UTF-8文本输出。它们被称为写入者。 标准输出,文件

读取Trait

读取器 是您的程序可以从中读取字节的组件。示例包括从键盘、文件等读取输入。 该Trait的 read_line() 方法可以用于从文件或标准输入流逐行读取数据。

编号 特征 方法&描述
1 读取 **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

编写 Trait

编写器 是您的程序可以向其中写入字节的组件。例如将值打印到控制台、写入文件等。该 Trait 的 write() 方法可用于向文件或标准输出流写入数据。

序号 特性 方法和描述
1 写入 **write( &buf)->结果 ** 将切片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。

注意 −文件I/O在下一章中讨论。

命令行参数

在执行程序之前,命令行参数被传递给程序。它们就像传递给函数的参数。命令行参数可以用于将值传递给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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程