普通人学习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
    

    吐槽:所以这样写的意义何在!

参考资料

posted @ 2020-03-23 13:07  我想嘿嘿  阅读(987)  评论(0编辑  收藏  举报