本文章内容基于以下环境,如若出入请参考当前环境。html
rustc 1.42.0 (b8cedc004 2020-03-09)
cargo 1.42.0 (86334295e 2020-01-31)
实用的程序需要有交互操做,本篇简单讲rust的输入和格式化输出函数
main.rs文件学习
use std::io; fn main(){ println!("请输入姓名:"); let mut name = String::new(); //读取一个字符串 io::stdin().read_line(&mut name); //必须使用占位符 println!("你好! {}", name); }
use std::io;
使用use
关键字作为包的导入,let
为定义变量关键字,mut
为可变变量关键字,String::new()
至关于new String()
。吐槽:你看String::和io::,String是类,io也是类?一个开头大小一个开头小写!至于双冒号的写法,既然你要学js的let为何不使用空格做为类的建立,或者直接使用函数的点号this
read_line(&mut name)
注意传入参数须带&
和mut
,这涉及到rust的借用与引用的概念。吐槽:rust不只函数定义时要加&和mut,调用时也要加&和mut,重复的写真有必要!spa
{}
为格式化占用符合,下面内容会说到。code
编译orm
rustc main.rs
warning: unused `std::result::Result` that must be used --> main.rs:6:2 | 6 | io::stdin().read_line(&mut name); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(unused_must_use)]` on by default = note: this `Result` may be an `Err` variant, which should be handled
这里有一些输出警告,先不用管它,这涉及到rust的异常管理。htm
运行结果ci
请输入姓名: 小明 你好! 小明
这里只是简单介绍用法,详细格式化专门一篇文章去讲。println!
和print!
是rust的输出打印函数,rust使用大括号{}
为占位符号。写法为:{语法}
。文档
错误示例
fn main(){ let a="这是一段字符串"; println!(a); }
编译错误
error: format argument must be a string literal --> index.rs:3:11 | 3 | println!(a); | ^ | help: you might be missing a string literal to format with | 3 | println!("{}", a); | ^^^^^ error: aborting due to previous error
正确写法
fn main(){ let a="这是一段字符串"; println!("{}",a); }
吐槽:臃肿的语法!
错误示例
fn main(){ let a="这是一段字符串"; println("{}",a); }
编译错误
error[E0423]: expected function, found macro `println` --> index.rs:3:2 | 3 | println("{}",a); | ^^^^^^^ help: use `!` to invoke the macro: `println!` error: aborting due to previous error For more information about this error, try `rustc --explain E0423`.
正确写法
fn main(){ let a="这是一段字符串"; println!("{}",a); }
正确写法
fn main(){ let a=123; let b=234; println!("{1}+{0}={2}",a,b,a+b); }
运行结果
234+123=357
正确写法
fn main(){ let a=123; let b=234; println!("{}+{1}={2}",a,b,a+b); }
运行结果
123+234=357
错误示例
fn main(){ let pi=3.14; println!("圆周率={pi}",pi); }
编译错误
error: there is no argument named `pi` --> index.rs:3:16 | 3 | println!("圆周率={pi}",pi); | ^^^^ error: argument never used --> index.rs:3:22 | 3 | println!("圆周率={pi}",pi); | ------------- ^^ argument never used | | | formatting specifier missing error: aborting due to 2 previous errors
正确写法
fn main(){ println!("圆周率={pi}",pi=3.14); }
运行结果
圆周率=3.14
若是就要打印,已经存在的变量怎么办?能够这么写
fn main(){ let pi=3.14; println!("圆周率={pi}",pi=pi); }
运行结果
圆周率=3.14
吐槽:因此这样写的意义何在!