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

    吐槽:因此这样写的意义何在!

参考资料

相关文章
相关标签/搜索