RUST 学习日记 第8课 ——输入输出

130 阅读3分钟

0x01 输出(print!)

fn main() {
//默认输出
println!("hello world");
//通配符输出
println!("Today is {} year {} month {} day",2021,6,22);
//通配符+位置 输出
println!("{0} + {1} + {0} is {2}",0,1,1);
//通配符+命名参数 输出
println!("My name is {name}, {age} old",name = "youlangta",age = 33 );
}

0x01 其他输出(print!)

fn main() {
    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!("{:1$}", "a", 6);
    println!("{1:0$}", 6, "a");
    println!("{:width$}", "a", width = 6);
    println!("二进制8位补零 {:08b}", a);
    println!("八进制8位补零 {:08o}", a);
    println!("十六进制16位补零 {:016b}", a);
    println!("小数保留3位数 {:.3} ", 0.01);
    println!("取位置1的值,小数位精度取位置0的值 {1:.0$} ", 3, 0.01);
    println!("{}连续获取两个值,第二个值为第一个值的精度(保留3位数){:.*} 连续获取两个值,第二个值为第一个值的精度(保留4位数) {:.*} ", 0.01, 3, 0.01, 4, 0.10);
  • 输出时可以在通配符{}中添加要输出值的位置(从0开始),来代指当前要输出哪个位置的值。常用符号如下表所示:
格式说明
{:b}输出结果转为二进制
{:o}输出结果转为八进制
{:x}输出结果转为十六进制(小写)
{:X}输出结果转为十六进制(大写)
{:e}科学计数(小写)
{:E}科学计数(大写)
{:p}输出指针
{:?}打印Debug
{:+}数值类型如果是整数,则前置打印+号
  • 1、#号——这应该算是一个补充标记符。常与其它字符连用 格式 | | | ----- | ------------------- | | {:#b} | 在输出的二进制前添加0b | | {:#o} | 在输出的八进制前添加0o | | {:#x} | 在输出的十六进制前添加0x(x是小写) | | {:#X} | 在输出的十六进制前添加0x(x是小写) | | {:#?} | 带换行和缩进的Debug打印 |

  • 2、> < ^  ——定义宽度

格式说明
{:6}或者{:>6}输出结果右对齐,6的值是usize类型
{:<6}输出结果左对齐,6的值是usize类型
{:^6}输出结果居中,6的值是usize类型
{:任意字符^6}输出结果居中,其余位置填充任意字符,6的值是usize类型
{:任意字符>6}输出结果右对齐,其余位置填充任意字符,6的值是usize类型
{:任意字符<6}输出结果左对齐,其余位置填充任意字符,6的值是usize类型
  • 3、$ ——约束条件位置定义
格式说明
{:1$}宽度取下标为1的值(该值是usize类型)
{1:0$}宽度取下标为1的值(该值是usize类型),值取下表0的值
{:width$}变量取参数名称为width的值 (该值是usize类型)
  • 4、0 ——常用作整数格式化时填充宽度
格式说明
{:08b}输出8位二进制,不足8位使用0填充
{:08o}输出8位八进制,不足8位使用0填充
{:016x}输出8位十六进制,不足16位使用0填充
  • 5、.N——常用作表示小数的精确值
格式说明
{:.3}小数点后精确度保留3位(不足补零,多余截断)
{1:.0$}位置为1的值,精确度是位置为0的值(不足补零,多余截断)
{:.*}接下来连续的两个值,第二个值的精确度是第一个值(不足补零,多余截断)

0x02 输入 (Stdin)

fn main() {
    let mut input = String::new();
    std::io::stdin()
    .read_line(&mut input)
    .expect("read_line error!");

    println!("你输入的内容是:{}",input);
}