普通人學習rust——從零到放棄 簡單輸入輸出

普通人學習rust——從零到放棄 簡單輸入輸出

環境

本文章內容基於以下環境,如若出入請參考當前環境。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使用大括號{}爲佔位符號。寫法爲:{語法}文檔

  1. 不能直接打印變量,`println!`不能直接打印變量。

    錯誤示例

    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);
    }

    吐槽:臃腫的語法!

  2. 是宏函數,須要加感嘆號

    錯誤示例

    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);
    }
  3. 能夠指定序號,位置從0開始,若是沒有指定則按順序排位

    正確寫法

    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
  4. 錯誤使用變量名做爲佔位符號,`{}`內的變量名跟外面的變量名是不同的。

    錯誤示例

    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

    吐槽:因此這樣寫的意義何在!

參考資料

相關文章
相關標籤/搜索