fn main() {
println!("Hello, world!");
let mut guess = String::new();
io::stdin().read_line(&mut guess).expect("error");
println!("你打印的数字是 {}",guess);
}
cargo build 安装新包
use std::io; //需要引入库
use rand::Rng;
use std::cmp::Ordering;
fn main() {
let secret_num=rand::thread_rng().gen_range(1..101);
println!("请输入你的猜测数字!");
let mut guess = String::new();
io::stdin().read_line(&mut guess).expect("error");
let guess:i32 = guess.trim().parse().expect("请输出数字");
match guess.cmp(&secret_num){
Ordering::Less =>println!("猜小了"),
Ordering::Greater =>println!("猜大了"),
Ordering::Equal =>println!("猜对了"),
}
println!("你输入的数字是 {}",guess);
print!("秘密数字是:{}",secret_num);
}
use std::io; //需要引入库
use rand::Rng;
use std::cmp::Ordering;
fn main() {
let secret_num=rand::thread_rng().gen_range(1..101);
loop {
println!("请输入你的猜测数字!");
let mut guess = String::new();
io::stdin().read_line(&mut guess).expect("error");
let guess:i32 = match guess.trim().parse(){
Ok(num) =>num,
Err(_) =>continue,
};
match guess.cmp(&secret_num){
Ordering::Less =>println!("猜小了"),
Ordering::Greater =>println!("猜大了"),
Ordering::Equal =>{
println!("猜对了");
break;
},
}
println!("你输入的数字是 {}",guess);
print!("秘密数字是:{}",secret_num);
}
}
use std::io; //需要引入库
use rand::Rng;
use std::cmp::Ordering;
use colored::*;
fn main() {
let secret_num=rand::thread_rng().gen_range(1..101);
loop {
println!("请输入你的猜测数字!");
let mut guess = String::new();
io::stdin().read_line(&mut guess).expect("error");
let guess:i32 = match guess.trim().parse(){
Ok(num) =>num,
Err(_) =>continue,
};
match guess.cmp(&secret_num){
Ordering::Less =>println!("{}","太小了!".red()),
Ordering::Greater =>println!("{}","太大了!".red()),
Ordering::Equal =>{
println!("{}","猜对了!".green());
break;
},
}
println!("你输入的数字是 {}",guess);
print!("秘密数字是:{}",secret_num);
}
}
const UC_NUM:u32 = 1000;
①整数类型
debug超出正常范围就会panicked,release模式下会超过最大值得数转回最小值
②字符类型
③浮点数
④复合类型tuple
取元素方式:(tuple元素从0开始,如下所示)
①解构
②点标记
⑤数组vector
下面byte数组表示初始化了8元素的数组,数组全为0
用条件控制流程:
while语句控制:
for循环:
或
或(用范围循环):
或是手工去github上git clone 下来安装:
命令:
rustlings watch //进入做题和批改模式
{}
的参数let x:i32=6;
let number = 3;
const NUMBER:i32 = 3;
fn sale_price(price:i32)->i32 {
...
}
解决方法:
①再拷贝一份数据(to_vec方法)
②传入引用数据,并且函数里面调用to_vec拷贝
③对原数组操作(原数组改为mut)
特点:允许使用,但是不获取所有权
若要修改原变量的值,加上mut:
除非不可变引用的作用域结束了:
①初始化构建struct
或写个类似构造函数的函数:
或赋值构造函数:
#[derive(Debug)]
②{:#?}打印信息能打印更工整的信息
里面的plus_one函数表示传入none就返回none,传入整数就返回Some(原来的数加1)
额外举例说明(若match匹配到了some(3)就打印,没匹配到就什么也不做):
编写对应的process函数:
cargo new xxx可以创建一个xxx的包
举例说明:
①库形式的lib crate和二进制的mian crate
②若需要更多的二进制crate
bin目录中的每一个二进制文件都对应一个crate
cargo new --lib resturante
注意:子模块可以看到父模块关键字,若想要父看到子,需要加公立pub
公共函数:
①绝对路径
②相对路径
或另一种方法:(super可以访问父模块当中的函数server_order)
若引入包很多,则可以像下图一样:
这个可以简化为:(self为自身)
原来的front_of_house模块:
let a=[1,2,3];
let mut v:Vec<i32>=Vec::new();
let v2=vec![1,2,3];
①初始化字符串
②添加字符
或
但是字符串不能通过下标访问:
①首先引入键值对
②创建并插入hashmap
③读取键值对数据
entry为若有,则不插入,若无则插入
,entry返回键值对
下面的例子(统计字符串中字母的频率):
①先做个返回类型的枚举
②根究返回值判断
③引入ErrorKind对不同情况做分情况处理
(若打开失败则创建txt文件)
或者这样写:
或者:
用处:让调用方来处理错误,更加灵活