Rust——猜数游戏、数据类型、函数、循环和if条件表达式

目录

一.数据类型

(一).基础类型

(二).进制

(三).复合类型 

①tuple

②数组

二.函数

三.循环和if

(一).if

(二).loop

(三).while

(四).for

四.猜数游戏


一.数据类型

(一).基础类型

类型含义类型含义
i88位intu8无符号8位int
i3232位intu32无符号~
i6464位intu64无符号~
i128128位intu128无符号~
isize与机器位数有关usize无符号~
f3232位浮点型f6464位浮点型
str字符串类型String类比c++STL中string

(二).进制

进制形式
10进制20
2进制0b0001 0100
8进制0o24
16进制0x14

(三).复合类型 

①tuple

类比c语言struct。

使用方式:

fn main() {
    let st:(i32, u32, String, f64) = (-500, 500, String::from("hello Rust"), 3.14);
    println!("{}", st.0);
    println!("{}", st.2);

    let (x, y, z, w) = st.clone();//深拷贝
    println!("{}", z);
}

②数组

既可以接收i32之类,也可以接收String之类类型。

使用方式,大致4种:

let arr1 = [1, 2, 3, 4];
let arr2 = ["hello", "Rust", "World"];
//       [类型;  个数]
let arr3:[String; 3] = [String::from("hello"), String::from("Rust"), String::from("World")];
//       [数据;个数]
let arr4 = [3;5];//let arr4 = [3, 3, 3, 3, 3];

二.函数

fn是函数的关键字,用以声明函数。

Rust不关心函数声明位置,在调用位置之后也可以。

返回值:

有返回值时,“{”前必须加"-> 返回类型"

Rust不用特意写return返回,默认函数最后一个函数表达式作为返回,必须没有分号,如果最后一句带有分号相当于不返回任何数据。

也可以使用return来显式返回。

fn main() {
    let ret = sum(1, 2);
    println!("{}", ret);
}

fn sum(a: i32, b: i32) -> i32
{
    println!("进入sum函数");
    a + b
}

三.循环和if

(一).if

使用方式与C语言类似。

if在使用时可以不加括号"()"。

判断条件必须是bool类型,不支持隐式类型转换。

例:

fn main() {
    let i = 3;
    if (i == 0) {}//正确 
    if i == 3 {}//正确
    if i {}//错误
}

(二).loop

loop默认死循环,直到遇见break语句时跳出循环,并可以返回一个值。 

fn main() {
    let mut num = 5;
    let ret = loop{
        if num == 0 {
            break String::from("Hello Rust");
        }
        num -= 1;
    };
    println!("{}", ret);
}

(三).while

使用与C语言类似,但是没有"()"。

fn main() {
    let mut num = 5;
    while num > 0{
        println!("{}", num);
        num -= 1;
    }
}

(四).for

for的使用与C++范围for类似,同样不加"()"。

/* 
(1..6)是一个range类型,范围是左闭右开,
.rev()是该类型的一个方法,用于反转range。
*/
fn main() {
    for i in (1..6).rev(){
        println!("{}", i);
    }

    let arr:[i32;5] = [1, 2, 3, 4, 5];
    for i in arr.iter(){
        println!("{}", i);
    }
}

四.猜数游戏

随机生成一个数字供玩家猜测,直到猜中为止,并提示玩家是否继续玩。

use std::io;
use rand::Rng;
use std::cmp::Ordering;
fn main()
{
    loop{
        let mut Rand_Num = rand::thread_rng().gen_range(1..101);//获取随机数
        loop{
            println!("请猜一个数字");
            let mut guess = String::new();
            io::stdin().read_line(&mut guess);
            //match暂时可以类比switch
            let guess: u32 = match guess.trim().parse(){ //判断输入数字是否是u32类型
                Ok(num) => num,//是u32,num给guess
                Err(_) => continue, //不是,更新输入
            };

            match guess.cmp(&Rand_Num){ //数字比较
                Ordering::Less=>println!("小了"),
                Ordering::Greater=>println!("大了"),
                Ordering::Equal=>{
                    println!("正确,就是{}", Rand_Num);
                    break;
                }
            }
        }

        println!("是否继续玩? y/n");
        let mut key = String::new();
        io::stdin().read_line(&mut key);
        match key.trim().to_lowercase().as_str(){//string转成str类型
            "y" => continue,
            "n" => break,
            &_ => todo!(),//异常退出
        }
    }
}

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就要 宅在家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值