目录
一.数据类型
(一).基础类型
类型 | 含义 | 类型 | 含义 |
i8 | 8位int | u8 | 无符号8位int |
i32 | 32位int | u32 | 无符号~ |
i64 | 64位int | u64 | 无符号~ |
i128 | 128位int | u128 | 无符号~ |
isize | app开发定制公司与机器位数有关 | usize | 无符号~ |
f32 | 32位浮点型 | f64 | 64位浮点型 |
str | app开发定制公司字符串类型 | 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);
- }
②数组
app开发定制公司既可以接收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不用特意写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默认死循环,直到遇见时跳出循环,并可以返回一个值。
- 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!(),//异常退出
- }
- }
- }