本章讨论如何接受来自标准输入Input的值以及如何将值显示到标准输出Output,在本章中,我们还将讨论传递命令行参数。
读和写
Rust的input和output标准库函数围绕两个特征进行组织-
- Read 读
- Write 写
Sr.No | Trait & 描述 | Example |
---|---|---|
1 | Read - 实现Read的类型具有面向字节输入的方法。 |
Stdin,File |
2 | Write - 实现Write的类型同时支持面向字节和UTF-8的文本输出。 |
Stdout,File |
Read Trait
Reader是程序可以读取字节的组件,示例包括从键盘,文件等读取输入。此特征的read_line()方法可用于一次从文件或标准输入流中读取一行数据。
Sr.No | Trait | Method & 描述 |
---|---|---|
1 | Read |
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.No | Trait | Method & 描述 |
---|---|---|
1 | Write |
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()返回命令行参数。
下面的示例将值作为命令行参数传递给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
参考链接
https://www.learnfk.com/rust/rust-input-output.html
标签:std,教程,read,无涯,let,println,line,main,Rust From: https://blog.51cto.com/u_14033984/9416289