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

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

参考资料

普通人学习rust——从零到放弃 简单输入输出的更多相关文章

  1. 普通人学习rust——从零到放弃 变量、不可变量、常量

    普通人学习rust--从零到放弃 变量.不可变量.常量 环境 本文章内容基于如下环境,如若出入请参考当前环境. rustc 1.42.0 (b8cedc004 2020-03-09) cargo 1. ...

  2. OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建

    # OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-hom ...

  3. 孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5

    孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5并学习权限设置 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十二天. 今天继续学习mongo ...

  4. 孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4

    孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十一天. 今天继续学习mongoDB的简单操作 ...

  5. 孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3

    孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十天. 今天继续学习mongoDB的简单操作, ...

  6. 孤荷凌寒自学python第六十三天学习mongoDB的基本操作并进行简单封装2

    孤荷凌寒自学python第六十三天学习mongoDB的基本操作并进行简单封装2 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第九天. 今天继续学习mongoDB的简单操作, ...

  7. 孤荷凌寒自学python第六十二天学习mongoDB的基本操作并进行简单封装1

    孤荷凌寒自学python第六十二天学习mongoDB的基本操作并进行简单封装1 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第八天. 今天开始学习mongoDB的简单操作, ...

  8. 『深度应用』NLP机器翻译深度学习实战课程·零(基础概念)

    0.前言 深度学习用的有一年多了,最近开始NLP自然处理方面的研发.刚好趁着这个机会写一系列NLP机器翻译深度学习实战课程. 本系列课程将从原理讲解与数据处理深入到如何动手实践与应用部署,将包括以下内 ...

  9. 通过欧拉计划学习Rust编程(第22~25题)

    最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...

随机推荐

  1. Navicat远程连接服务器Mysql

    使用NAVICAT远程访问MYSQL的步骤 1.修改远程访问权限 //进入MySQL服务器或使用其它工具 xxxx@ubuntu:/$ mysql -h localhost -u root -p xx ...

  2. JavaScript深入浅出-闭包

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 function (){ var localVal ...

  3. python基础函数、方法

    python的函数和方法,通过def 定义: 函数的特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 函数和方法的区别:函数有返回值.方法没有 语法定义: def sayhi():#函数名 p ...

  4. 模型压缩之Channel Pruning

    论文地址 channel pruning是指给定一个CNN模型,去掉卷积层的某几个输入channel以及相应的卷积核, 并最小化裁剪channel后与原始输出的误差. 可以分两步来解决: channe ...

  5. Python不使用元类创建缓存实例

    问题 当创建类实例时我们想返回一个缓存引用,让其指向上一个用同样参数(如果有的话)创建出来的类实例. 这个问题常常出现在当我们想确保针对一组输入参数只会有一个类实例存在时. 解决方法: 使用一个与类本 ...

  6. Turn and Stun server · J

    本文简介了Turnserver(Turn + Stun)服务器的搭建.Turnserver主要提供了stun服务,支撑NAT.防火墙穿透,turn服务器,支撑打洞失败时的数据中转.使用场景上类似于前端 ...

  7. ZeroMQ,史上最快的消息队列

    一.ZMQ 是什么 阅读了 ZMQ 的 Guide 文档后,我的理解是,这是个类似于 Socket 的一系列接口,他跟 Socket 的区别是:普通的 socket 是端到端的(1:1的关系),而 Z ...

  8. Circles of Waiting

    题目传送门 很容易列出期望的方程,高斯消元搞一波但是常规消元复杂度是$O(r^6)$的考虑从左到右从上到下编号然后按编号从小到大消元假设黄点是已经消元的点,那么消下一个点的时候,只有绿点的方程中该项系 ...

  9. springboot+jwt实现token登陆权限认证

    一 前言 此篇文章的内容也是学习不久,终于到周末有时间码一篇文章分享知识追寻者的粉丝们,学完本篇文章,读者将对token类的登陆认证流程有个全面的了解,可以动态搭建自己的登陆认证过程:对小项目而已是个 ...

  10. CSS——NO.5(格式化排版)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...