【RUST学习日记】第9课 输入与输出

简介: 【RUST学习日记】第9课 输入与输出

0x00 回顾


上一篇文章主要讲解了Rust中的数值类型进行类型转换的一些要点。通过本文咱们来了解下Rust的输入和输出。前面用过println!好多次了,这里详细介绍下它用法,本篇文章可能是全网最详细的Rust的输出用法讲解了。


0x01 输出(print!)


当首次接触到Rust,用他写出Hello World!时,咱们就已经接触到输出println!了,咱们已经知道了可以用它来输出字符串、数字等等,其实它还有很多格式化输出的方式。下来一起来了解下。


1、默认输出


println可以直接输出字符串字面量。

示例代码:

println("hello wolrd");

代码执行结果:

Hello, world!


2、通配符


在字符串字面量中使用{}通配符代指即将输出的值,后面依次对应输出的值。如果有多个值,中间需使用英文逗号,分隔。

示例代码:

println!("今天是 {} 年 {} 月 {} 日", 2021, 6, 22);

代码执行结果:

今天是 2021 年 6 月 22 日


3、通配符 + 位置


输出时可以在通配符{}中添加要输出值的位置(从0开始),来代指当前要输出哪个位置的值。

示例代码:

println!("{0} 的平方是 {0}, {0} 的相反数是 {1}", 1, -1);

代码执行结果:

1 的平方是 1, 1 的相反数是 -1


4、通配符 + 命名参数


输出时可以在通配符{}中添加要输出值命名参数,来代指当前要输出哪个命名参数的值。

示例代码:

println!("我的名字叫{name}, 今年{age}岁, 喜欢{hobby}", hobby = "打篮球", name = "张三", age = 18);

代码执行结果:

我的名字叫张三, 今年18岁, 喜欢打篮球


5、通配符 + 对齐方式 + 对齐宽度


输出时可以在通配符{}中添加要输出值的位置(从0开始),来代指当前要输出哪个位置的值。常用符号如下表所示:


image.png


其它符号:

1、#——这应该算是一个补充标记符。常与其它字符连用。


image.png


2、> < ^ ——定义宽度


image.png


3、$——约束条件位置定义


image.png


4、0 ——常用作整数格式化时填充宽度


image.png


5、.N——常用作表示小数的精确值


image.png


示例代码:


let a = 31;
    let b = [1, 3, 5, 7, 9];
    println!("二进制 {:b}", a);
    println!("八进制 {:o}", a);
    println!("十六进制(小写) {:x}", a);
    println!("十六进制(大写) {:X}", a);
    println!("科学计数(小写) {:e}", 100000_f32);
    println!("科学计数(大写) {:E}", 100000_f32);
    println!("打印Debug {:?}", b);
    println!("输出标点 {:+}", 5);
    println!("前置符二进制 {:#b}", a);
    println!("前置符八进制 {:#o}", a);
    println!("前置符十六进制(小写) {:#x}", a);
    println!("前置符十六进制(大写) {:#X}", a);
    println!("带换行和缩进的Debug打印 {:#?}", b);
    println!("使用大于号右对齐 {:>6}{:>6}{:>6}", 1, 2, 3);
    println!("使用小于号左对齐 {:<6}{:<6}{:<6}", 1, 2, 3);
    println!("省略大于号右对齐 {:6}{:6}{:6}", 1, 2, 3);
    println!("居中对齐 {:^6}{:^6}{:^6}", 1, 2, 3);
    println!("填充任意字符居中对齐 {:-^6}{:*^6}{:1^6}", 1, 2, 3);
    println!("二进制8位补零 {:08b}", a);
    println!("八进制8位补零 {:08o}", a);
    println!("十六进制16位补零 {:016b}", a);
    println!("{:1$}", "a", 6);
    println!("{1:0$}", 6, "a");
    println!("{:width$}", "a", width = 6);
    println!("小数保留位数 {:.3} ", 0.01);
    println!("小数保留位数 {1:.0$} ", 3, 0.01);
    println!("{}小数保留3位数 {:.*} --- 保留4位数 {:.*} ", 0.01, 3, 0.01, 4, 0.10);

代码执行结果:

二进制 11111
八进制 37
十六进制(小写) 1f
十六进制(大写) 1F
科学计数(小写) 1e5
科学计数(大写) 1E5
打印Debug [1, 3, 5, 7, 9]
输出标点 +5
前置符二进制 0b11111
前置符八进制 0o37
前置符十六进制(小写) 0x1f
前置符十六进制(大写) 0x1F
带换行和缩进的Debug打印 [
    1,
    3,
    5,
    7,
    9,
]
使用大于号右对齐      1     2     3
使用小于号左对齐 1     2     3     
省略大于号右对齐      1     2     3
居中对齐   1     2     3   
填充任意字符居中对齐 --1---**2***113111
二进制8位补零 00011111
八进制8位补零 00000037
十六进制16位补零 0000000000011111
Process finished with exit code 0


6、{}


有时可能在字符串中包含{},这里可以通过{{输出{}}输出}

示例代码:

println!("左边的括号  {{");
println!("右边的括号  }}");
println!("全括号  {{}}");


0x02 格式化(format!)


格式化的用法和输出的用法基本相同,它的用途是写格式化文本到字符串。上面代码的所有println!都可以换成format!,使用format!常用于格式化多个变量为字符串。println则会直接输出到屏幕。这里就不再额外介绍一次了。


0x03 输入 (Stdin)


标准输入也叫作控制台输入,是常见输入的一种。控制台输入其实很少可以用的到,这里简单介绍下了。

示例代码:

let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("read_line error!");
println!("你输入的内容是 : {}", input);

解释下上面的代码,我们声明了一个可变的字符串类型的变量,然后使用了stdin去从控制台读出输入内容保存到input中。如果读入失败出现异常,则输出自定义错误read_line error!。这里的字符串,错误处理,后续章节会介绍,这里了解即可。


0x04 小结


本篇文章主要讲了Rust的输出格式。开篇我也说了,本篇文章可能是全网最详细的Rust的输出用法讲解了。另外,print!默认是无法打印结构体类型的。对于控制台输入的操作了解即可。不知道大家发现了没有,println!后面有一个叹号,我也从把println!叫做是一个函数。没错,它不是一个函数,它叫做函数的主要区分就是看它是不是以感叹号结尾。关于的知识也将会在后续章节介绍,感兴趣的同学可以提前从网上查下资料。

相关文章
|
12天前
|
存储 Rust 安全
【Rust学习】06_切片
所有权、借用和切片的概念确保了 Rust 程序在编译时的内存安全。Rust 语言提供了跟其他系统编程语言相同的方式来控制你使用的内存,但拥有数据所有者在离开作用域后自动清除其数据的功能意味着你无须额外编写和调试相关的控制代码。
13 1
|
27天前
|
存储 Rust 安全
【Rust学习】04_所有权
所有权是 Rust 最独特的特性,对语言的其余部分有着深远的影响。它使 Rust 能够在不需要垃圾收集器的情况下保证内存安全,因此了解所有权的运作方式非常重要。在本章中,我们将讨论所有权以及几个相关功能:借用、切片以及 Rust 如何在内存中布局数据。
15 1
|
1月前
|
存储 Rust 编译器
【Rust学习】03_通用编程概念
您成功了!这是一个相当大的章节:您了解了变量、标量和复合数据类型、函数、注释、 if 表达式和循环!若要练习本章中讨论的概念。
24 2
|
22天前
|
Rust 编译器
【Rust学习】05_引用和借用
在这章我们将开始学习Rust的引用和借用,它们是Rust中重要的概念,它们允许我们创建可变引用,以及创建不可变引用。
14 0
|
2月前
|
Rust Linux iOS开发
【Rust学习】01_入门准备
让我们开始您的 Rust 之旅吧!有很多东西要学,但每一段旅程都是从第一步开始的,在本章中,我们将一起来学习以下知识点: - 在 Linux、macOS 和 Windows 上安装 Rust - 编写打印程序 Hello, world! - 使用 cargo Rust 的包管理器和构建系统
61 1
|
2月前
|
存储 移动开发 Rust
【Rust学习】02_猜谜游戏
让我们一起动手完成一个项目,来快速上手 Rust!本章将介绍 Rust 中一些常用概念,并向您展示如何在实际项目中运用它们。您将会学到 let、match、方法、关联函数、引用外部 crate 等知识!后续章节会深入探讨这些概念的细节。
26 0
|
3月前
|
JSON Rust IDE
全网最全的Rust学习资源
学习Rust过程中整理了一些学习资料分享一下。
203 1
|
3月前
|
Rust
Rust编程语言:探索性学习与实践指南
Rust编程语言:探索性学习与实践指南
47 0
|
3月前
|
Rust 编译器
【一起学Rust】Rust学习前准备——注释和格式化输出
【一起学Rust】Rust学习前准备——注释和格式化输出
53 0
|
8月前
|
Rust
Rust编程语言:探索性学习与实践指南
Rust编程语言:探索性学习与实践指南
45 0