本文章內容基於以下環境,如若出入請參考當前環境。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
吐槽:因此這樣寫的意義何在!