跳转到内容

Rust 初学者编程/基础数学测试程序/检查数字

来自维基教科书,为开放世界提供开放书籍

检查数字

[编辑 | 编辑源代码]

现在,我们希望验证用户输入的数字是否等于两个数字运算后的结果。首先,让我们计算一下这个数字。为此,将两个数字和运算符作为结构体的一部分是有意义的,因为这三个值经常一起使用,将它们放在一起会很方便,这样我们就可以在结构体上定义函数,以使代码更清晰。让我们像这样定义结构体

struct MathsQuestion {
    left: i32,
    right: i32,
    operator: Operator,
}

结构体通常情况下,定义一个 new() 函数来方便构造结构体会很方便。我们可以这样做

impl MathsQuestion {
    fn new(left: i32, right: i32, operator: Operator) -> MathsQuestion {
        MathsQuestion {
            left,
            right,
            operator,
        }
    }
}

注意,由于变量的名称与结构体中字段的名称相同,因此我们不需要写出

left: left,
right: right,
operator: operator,

这是一个很好的便利。此外,我们使用的是隐式返回,没有分号,因此我们不需要写 return。

现在,我们可以将我们的 print_question() 函数更改为该新结构体上的方法,因此我们在 impl MathsQuestion {} 块中添加以下函数

fn print(&self) {
    println!("What is {} {} {}?", self.left, self.operator, self.right);
}

现在,我们可以在 MathsQuestion 结构体上编写一个函数来计算结果,这个函数也位于 impl MathsQuestion {} 块中

fn calc_result(&self) -> i32 {
    match self.operator {
        Operator::Addition => self.left + self.right,
        Operator::Subtraction => self.left - self.right,
    }
}

现在,我们可以将我们的 main() 函数更改为

fn main() {
    let question = MathsQuestion::new(35, 23, Operator::Subtraction);
    question.print();
    let val = wait_for_input();
    let result = question.calc_result();
    if val == result {
        println!("You got it correct! Well done!");
    } else {
        println!("Incorrect! The correct answer was {}", result);
    }
}

现在它可以工作了!如果我们输入 12(即 35 - 23),我们得到正确的消息,如果我们输入任何其他数字,我们得到错误的消息!

接下来:我们使用外部箱子使生成的数字随机化

华夏公益教科书