Rust - 输入&输出

Rust - 输入&输出 首页 / Rust入门教程 / Rust - 输入&输出

本章讨论如何接受来自标准输入Input的值以及如何将值显示到标准输出Output,在本章中,我们还将讨论传递命令行参数。

读和写

Rust的input和output标准库函数围绕两个特征进行组织-

  • Read 读
  • Write 写
Sr.NoTrait & 描述Example
1

Read - 实现Read的类型具有面向字节输入的方法。

Stdin,File
2

Write - 实现Write的类型同时支持面向字节和UTF-8的文本输出。

Stdout,File

Read Trait

Reader是程序可以读取字节的组件,示例包括从键盘,文件等读取输入。此特征的read_line()方法可用于一次从文件或标准输入流中读取一行数据。

Sr.NoTraitMethod & 描述
1Read

read_line(&mut line)->Result

读取一行文本并将其附加到一行(字符串),返回值为io::Result,即读取的字节数。

控制台读取

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 :
Learnfk
Hello , Learnfk
no of bytes read , 10

Write Trait

Writers是程序可以向其写入字节的组件,示例包括将值打印到控制台,写入文件等,此特征的write()方法可用于将数据写入文件或标准输出流。

Sr.NoTraitMethod & 描述
1Write

write(&buf)->Result

将切片buf中的某些字节写入基础流,它返回io::Result,即写入的字节数。

写入控制台

print!或 println!宏可用于在控制台上显示文本,但是,您也可以使用 write()标准库函数向标准输出显示一些文本。

让我们考虑一个示例来理解这一点。

use std::io::Write;
fn main() {
   let b1=std::io::stdout().write("LearnFK ".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();
}
LearnFK Point
bytes written 15

stdout()标准库函数返回当前进程的标准输出示例的句柄,可以将 write 函数应用到该句柄, write()方法返回一个枚举结构, unwrap()是从枚举中提取实际输出的辅助方法,如果发生错误,unwrap方法将发送紧急消息。

命令行参数

它们就像传递给函数的参数一样,命令行参数可用于将值传递给 main()函数,std::env::args()返回命令行参数。

链接:https://www.learnfk.comhttps://www.learnfk.com/rust/rust-input-output.html

来源:LearnFk无涯教程网

下面的示例将值作为命令行参数传递给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); //打印所有传递的值
      as commandline arguments
   }
}

编译后,程序将生成文件 main.exe,多个命令行参数应以空格分隔,从终端执行main.exe作为 main.exe hello learnfk 。

No of elements in arguments is :3
[main.exe]
[hello]
[learnfk]

输出显示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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

从0开发一款iOS App -〔朱德权〕

分布式技术原理与算法解析 -〔聂鹏程〕

小马哥讲Spring核心编程思想 -〔小马哥〕

深度学习推荐系统实战 -〔王喆〕

乔新亮的CTO成长复盘 -〔乔新亮〕

Spring Cloud 微服务项目实战 -〔姚秋辰(姚半仙)〕

快速上手C++数据结构与算法 -〔王健伟〕

结构沟通力 -〔李忠秋〕

云时代的JVM原理与实战 -〔康杨〕

好记忆不如烂笔头。留下您的足迹吧 :)