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


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

環境

本文章內容基於如下環境,如若出入請參考當前環境。

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為什么不使用空格作為類的創建,或者直接使用函數的點號

read_line(&mut name)注意傳入參數須帶&mut,這涉及到rust的借用引用的概念。吐槽:rust不僅函數定義時要加&和mut,調用時也要加&和mut,重復的寫真有必要!

{}為格式化占用符合,下面內容會說到。

編譯

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的異常管理

運行結果

請輸入姓名:
小明
你好! 小明

輸出

這里只是簡單介紹用法,詳細格式化專門一篇文章去講。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
    

    吐槽:所以這樣寫的意義何在!

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM