本来是想昨晚一起发的,但当时只学了一半,不具体,就没发。闲话不说,切入正题

上两节,讲的是rust最基本的,是一切的基础。我觉得能上这个论坛肯定是有编程基础的,最起码了解c吧,所以前面标点符号,每句后面加“;”,符号用英文格式……等,我就不复述了。

不加分号,就默认在终端窗口输入;加分号一般是在main.rs文件中,其他会另作说明。以后所有有关rust学习章节只谈,我们需要操作的,具体运行,就不细谈了。

(2)猜数字游戏

这节是通过实际应用来学习的,先看一下相关语法(前面讲过的就不复述了)

use+库名::……::库名::方法名;   声明使用库

1.use std::io; 用来处理用户输入输出

第一种:

use std::io;
fn main() {io::stdin()  //(建议这样写,方便他人阅读).read_line(&mut 变量).expect("XXX");/*io库stdin方法.功能(地址).调用方法(“XXX”)   错误时输出XXX,通用调用方法*/
}

第二种:未声明,直接在main函数中使用std::io::stdin调用函数

2.use rand::Rng; 用来生成随机数

/*Cargo.toml 文件中,[dependencies]下,添加rand = "0.8.3"后使用cargo build构建可执行文件*/
use rand::Rng;
fn main(){let 变量 = rand::thread_rng().gen_range(1..101);/*语句意思为,定义变量,并将生成1~100的随机数赋予它若需要包含101,则可改为(1..=101)thread_rng函数提供随机数生成器gen_range为使用的方法*/
}

3.use std::cmp::Ordering; 用来比较大小

use std::cmp::Ordering;
fn main() {match 变量1.cmp(变量2地址) {
/*使用这一语句,会有以下几种可能*/Ordering::Less => 作出相应反应,//小了Ordering::Greater => 作出相应反应,//大了Ordering::Equal => 作出相应反应,//相等}
}

(个人觉得,这个就是rust优点,它将所有模块化功能,做成方法库,所有可能性,作为实例参数,若不调用就会提示出错)

4.let:定义变量(称为定量更合适,它不可变);mut:声明变量是可变的

即     let hao = 123;  //它是不可变,即hao不能被重新赋值

let mut hao = 123;  //可变,即hao可以被重新赋值

(但有一个骚操作,就是给let hao 赋予一个会返回可变值的方法,那它就数值可变,但方法不能变,个人觉得这就像赋予数据库的某个方法的返回值的地址,直接读取地址中的数)

5.String::new() 新的String空实例,可被赋给某个变量

6.println!("{}",变量);  //变量可代替{}位置

7.rand crate库的添加

用cargo创建的文件,自动生成的Cargo.toml中,[dependencies]下,可以添加库crate,可以增加许多其他功能,本节生成随机数,就是添加rand crate库,添加方法如下

rand = "0.8.3"或rand = "^0.8.3"  //(目前已经更新到0.8.5,可以在下述链接查,直接搜索rand就行)

crates.io: Rust Package Registryhttps://crates.io/(在这里有个小坑,建议刚下载的人,设置一下自动保存,这东西要保存后,才能下载rand库,我当时还懵b半天,没搞懂,哪哪都没问题,就是下载不了)

利用上节说到的,cargo build运行一下(加入库后,需要让电脑运行一下,构建可执行文件(关于可执行文件,可以理解为将结果保存,如果程序没变化,将直接调用结果,运行时间大大缩短),如果Cargo.toml文件保存后,直接输入这个,运行时间会长一点,这个包含了下载时间,正常现象)

7.cargo update  //可以更新crate版本

但它只能更新小版本,比如0.8.1=>0.8.3;但类似0.8.1=>0.9.1,需要将rand="0.8.1"改为rang="0.9.1",(个人觉得,可能是rand crate库,内部是以地址的方式储存的。王者好像也是这样,大版本需要重新下载,小版本可以线上下载)

8.cargo doc --open  //可打开自带文档,如果你英语好,可以试试,它就是第一节提到的文档的英文版。

9.转换值类型:

/*值类型:i32、u32、i64、u64(i:数字,u:无符号数字,32位、64位)*/
fn main(){let mut 变量 = String::new();//定义可变变量guess,并给它绑定空实例,此时,它的值类型为i32let 变量: 值类型 = 变量.trim().parse().expect("XXX");/*左边是变量的值类型右边是变量trim():去除字符串开头和结尾的空白字符parse():将字符串解析成数字expect("XXX"):调用方法,错误时,输出XXX,通用*/
}

这里要稍微更正一下以前的观念,以前的文章认为“=”左右为赋值关系,今天通过上述理解,它应该是将等号右边的地址绑定到等号的左边,左边为操作行为,右边为地址。例如:let hao = String::new();,它的意思是将,String空实例的地址,起名叫hao,相当于绑定;再比如,let hao:u32 = &hao;,它是将存储123的地址,转化为hao

10.loop、break循环(有点像微机原理的规则),一般与条件语句合用,这里就使用上述比较大小的函数了

use std::cmp::0redering;
fn main() {loop{//循环开始match 变量1.cmp(变量2地址) {
/*使用这一语句,会有以下几种可能*/Ordering::Less => 作出相应反应,//小了Ordering::Greater => 作出相应反应,//大了Ordering::Equal => {作出相应反应;//相等break;//退出循环}}}
}

11.无效输入处理:如果输入不是数字

fn main(){
loop{
let 变量: 值类型 = match guess.trim().parse() {Ok(num) => num,//若是数字,传递出numErr(_) => continue,//若不是数字,则进入loop下一次循环};}
}

综上,便可制作出猜数字的程序,如下所示

use rand::Rng;//生成随机数的库
use std::cmp::Ordering;//比较大小的库
use std::io;//用户输入库fn main() {println!("猜数字游戏!");//输出let secret_number = rand::thread_rng().gen_range(1..101);//令secret_number=1~100的随机数字loop {//无限循环println!("请输入你的数字.");let mut guess = String::new();//将新的空白字符串绑定可变变量guessio::stdin().read_line(&mut guess).expect("无法读行");//expect("xxx")为通用调用方法//io库stdin的方法,读行功能的地址,调用方法及错误返回let guess: u32 = match guess.trim().parse() {//将字符串转化为数字,左边是值类型,右边是去除字符串开头和结尾的空白字符,并将其余部分转化为数字Ok(num) => num,//可能一,正确,传递出数字,进行下一步Err(_) => continue,//可能二。不是数字,进入loop下一次循环};println!("你的数字: {}", guess);//输出对应变量,{}为占位符,即变量位置match guess.cmp(&secret_number) {//guess与secret_number比大小Ordering::Less => println!("小了!"),Ordering::Greater => println!("大了!"),Ordering::Equal => {println!("你赢了!");break;//退出loop循环}}}
}
//调试中,可用ctrl-c终止程序

rust学习(二)猜数字游戏主要语句和理解相关推荐

  1. JavaScript(二)——猜数字游戏

    下面我们将会通过一个小案例--猜数字游戏,来直观地感受一下如何让JavaScript完成任务. 设计要求 假设你的老板给你布置了以下游戏设计任务要求: 我想让你开发一个猜数字游戏.游戏应随机选择一个 ...

  2. Java实验二猜数字游戏,JAVA-第2周实验-猜数字游戏

    JAVA--第2周实验--猜数字游戏 /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reser ...

  3. Python学习笔记-猜数字游戏(学习语法)

    程序运行截图如下: 源码如下: import randomprint("Let's play a funny game") num=random.randint(100,99999 ...

  4. WebAssembly运行时库(WASM runtime:wasmer 或 wasmtime)\将rust官方demo猜数字编译为WASI目标并使用Wasmer运行

    文章目录 WebAssembly运行时库(wasmer 或 wasmtime.wasmer-go) 一.引子 1. 什么是WASI 2. 有哪些优秀的 WebAssembly 运行时? 二.wasme ...

  5. 一个rust程序(猜数字)

    使用rust编写一个猜数字游戏 use std::io; use rand::Rng; use std::cmp::Ordering;fn main() {// 生成一个随机数let secret_n ...

  6. 冰豹lua驱动设置_通过编写“猜数字”游戏学习 Lua | Linux 中国

    通过编写一个简单的游戏来认识 Lua,它是一种动态类型的.轻量级的.高效的.可嵌入的脚本语言. 来源:https://linux.cn/article-13000-1.html 作者:Seth Ken ...

  7. Java学习小程序(5)猜数字游戏

    猜数字游戏,游戏规则:程序内置一个1到1000之间的数字作为猜测的结果,由用户猜测此数字.分别用 while 和 do-while 语句实现. import java.util.Scanner; pu ...

  8. c语言猜数字游戏用while,【C语言基础】有趣的猜数字游戏。(while循环,if语句,switch语句)...

    要求:猜数字游戏的实现.代码如下:#include #include #include void menu() { printf("***************************** ...

  9. python猜数字1001untitled_如何利用Matlab GUI制作猜数字游戏

    第二堂课布置了一个Mission Impossible:如何利用Matlab GUI制作猜数字游戏 这个任务对很多人来说会非常困难,首先要面对的是 Matlab GUI的机制,这是完全未知的机制,在面 ...

最新文章

  1. R和Python谁更好?这次让你「鱼与熊掌」兼得
  2. python函数的组成要素_python函数要素有哪些?这7点是你写好python代码的关键
  3. Vite+Vue3页面空白、图标不显示问题解决
  4. Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之与其它Fragment通信
  5. WEB安全基础-Javascrp相关知识点之DOM
  6. c java学哪个好_c语言和java学哪个好
  7. (Mark)JS中的上下文
  8. 但是在公司开空调睡觉还是冷
  9. <Android开发> Android开发工具- 之-I2C TOOLS工具使用
  10. 建筑有言丨如果大学有一个最好的专业,那就是建筑学
  11. Java8 CompletableFuture(2)回调函数 thenApply thenAccept thenRun
  12. 什么是SysWow64,什么是System32
  13. thinkadmin
  14. python报考软考哪个比较好_软考考什么比较好?
  15. python对txt文本文件边读边写,同时读取和写入的方式修改文件
  16. Java面试题:Applet和普通的Java应用程序有哪些区别?
  17. 微软零信任用户访问架构解读
  18. QWidget旋转方法
  19. python交互模式下输出一首古诗
  20. 软件测试里面关于网络抓包的学习笔记思考

热门文章

  1. diy无感无刷电机霍尔安装_无刷电机之无感方案控制难点解析
  2. 蓝牙定位,多种应用方式的新技术
  3. 13 罗马数字转整数
  4. Photoshop纹理制作——毛发纹理
  5. 五度易链企业版APP全新升级啦
  6. Web端MVT矢量瓦片加载之OpenLayers篇
  7. 文案写作,吸睛文案的15字口诀(二)
  8. VR系统的组成与交互技术汇总
  9. 精通Spring_4.x__企业应用开发实战PDF分享
  10. 为什么上班的时候基本上都是坐着,但是感觉很累?