zoukankan      html  css  js  c++  java
  • 普通人学习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
      

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

    参考资料

  • 相关阅读:
    php求2个文件相对路径
    [JZOJ 5818] 做运动
    [JZOJ 5819] 大逃杀
    [JZOJ 5852] 相交
    [JZOJ 5817] 抄代码
    [JZOJ 5791] 阶乘
    [转载](asp.net大型项目实践)
    [转载](你必须知道的.net)
    [转载](闲话WPF)
    .net之 HtmlInputFile
  • 原文地址:https://www.cnblogs.com/loveheihei/p/12551605.html
Copyright © 2011-2022 走看看