如何使用Cargo实现一个简单的猜数字游戏

silverwq
2022-07-04 / 0 评论 / 328 阅读 / 正在检测是否收录...

游戏目标

只需要将输入的数字打印出来即可。

程序代码

使用cargo new命令创建项目,在main.rs中写入以下代码:

use std::io;

fn main() {
    println!("猜1个数!");

    let mut guess = String::new();
    io::stdin().read_line(&mut guess).expect("无法读取行");

    println!("你猜测的数是{}",guess);
}

获取输入内容需要使用io库,io库是在std标准库里的,所以要使用use来引入标准库。默认情况下,rust会把一个叫做prelude(发音/'preljuːd/)的库导入到程序中,prelude是序曲的意思,有人叫做预导入,如果要用到的类型不在prelude库里的话,则需要自己使用use显式的导入。

如果不导入的话,也可以使用全名来使用,例如std::io::stdin(),这种写法也可以。

使用let来声明变量,在rust里默认变量是不变的,例如

let foo = 1;
let bar = foo;// immutable,不可变的意思,发音/ɪ'mjuːtəb(ə)l/
foo = 2;// 会报错

为了让变量可以变化,声明变量的时候需要加上mut关键字:

let mut foo = 1;
foo = 2;// 不会报错了

let mut guess = String::new();语句:
程序中使用String::new()来创建一个空白的字符串实例,并且赋予给guess变量。然后将输入的值读取到变量guess中,因为输入的值是可变的,所以read_line的参数需要家mut声明,不然默认引用也是不可以变的。

io::stdin().read_line(&mut guess).expect("无法读取行");语句:
注意的一点是,read_line会返回io::Result枚举类型,有两个值,一个是ok,如果是ok的话,还有返回值,还有一个是Err。其中io::Result上还有定义一些方法,其中expect方法就是其中的方法之一,如果read_line返回的是Err,那么expect就会中断这个程序,并且把信息显示出来,如果返回的是ok,expect就会提取结果值,并且将这个值返回给用户。

println!("你猜测的数是{}",guess);语句:
花括号代表是占位符,一个花括号对于后面的一个变量,如果有两个花括号,就按顺序分别对应后第一个,第二个变量。

0

评论 (0)

取消