普通人学习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. python3爬虫:利用urllib与有道翻译获得翻译结果

    在实现这一功能时遇到了一些困难,由于按照<零基础入门python>中的代码无法实现翻译,会爆出“您的请求来源非法,商业用途使用请关注有道翻译API官方网站“有道智云”: http://ai ...

  2. Servlet+JSP 对外访问路径配置

    servlet类似 servlet配置为: <servlet>    <servlet-name>Demo01_OutWrite</servlet-name>    ...

  3. <USACO07JAN>解决问题Problem Solvingの思路

    日常为dp贡献脑细胞 #include<iostream> #include<cmath> #include<cstdio> #include<cstdlib ...

  4. res文件夹及xml资源文件详解

    目录 一.values文件:存放字符串(strings).颜色(colors).尺寸(dimens).数组(arrays).样式(styles类似于CSS文件).类型等资源 二.drawable:存放 ...

  5. 算法笔记-Day_01(1001 害死人不偿命的(3n+1)猜想

    卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 ...

  6. 软件测试人必备的 Python 知识图

    之前发过蛮多不少关于 Python 学习的文章,收到大家不少的好评,不过大家也有许多困惑: 现在测试不好做,是不是真的该重新去学一门热门的语言? 入门 Python 该学哪些知识点?该看哪些书? 可以 ...

  7. Python Mock 的入门

    Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西.准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代 ...

  8. iPhone5se难逃“酱油”命运?

    苹果春季新品发布会即将举行,按照惯例,只会有一些不痛不痒的产品出现,最起码,不会有革命性的爆点,今年大抵相似,最大的亮点莫过于,苹果有可能会推出一款名叫"iPhone5se"的手机 ...

  9. HDU 5894 hannnnah_j’s Biological Test【组合数学】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5894 题意: 一个圆桌上有$n$个不同的位置,$m$个相同的人安排到这$n$个位置上,要求两人相邻的 ...

  10. Animate.css动画库,简单的使用,以及源码剖析

    animate.css是什么?能做些什么? animate.css是一个css动画库,使用它可以很方便的快捷的实现,我们想要的动画效果,而省去了操作js的麻烦.同时呢,它也是一个开源的库,在GitHu ...