青少年编程与数学 02-019 Rust 编程基础 02课题、开始编程

青少年编程与数学 02-019 Rust 编程基础 02课题、开始编程

**摘要:**编写一个猜数游戏是一个非常棒的方式来熟悉 Rust 编程语言。这个项目可以帮助你了解 Rust 的基本语法、控制流、输入输出以及随机数生成等核心概念。这是一个简单的猜数游戏的实现步骤和代码示例。
**关键词:**代码示例、Hello, world!


一、游戏规则

  1. 程序随机生成一个 1 到 100 之间的整数。
  2. 用户尝试猜测这个数字。
  3. 程序根据用户的输入给出提示:
    • 如果用户猜的数字太小,提示"Too small!"。
    • 如果用户猜的数字太大,提示"Too big!"。
    • 如果用户猜对了,提示"Congratulations! You got it!"并结束程序。
  4. 用户可以不断猜测,直到猜对为止。

二、实现步骤

1. 创建项目

首先,通过命令行工具,使用 Cargo 创建一个新的 Rust 项目:

bash 复制代码
cargo new guess_number_game
cd guess_number_game

2. 编写代码

使用RustRover打开新建的项目目录。

打开 src/main.rs 文件,并将以下代码粘贴进去:

rust 复制代码
use std::io; // 引入标准库中的 I/O 模块
use rand::Rng; // 引入 rand 库,用于生成随机数

fn main() {
    println!("Guess the number!");

    // 生成一个 1 到 100 之间的随机数
    let secret_number = rand::rng().random_range(1..=100);

    println!("The secret number is: {}", secret_number); // 仅用于调试,实际游戏中应注释掉

    loop {
        println!("Please input your guess:");

        // 创建一个可变字符串变量,用于存储用户输入
        let mut guess = String::new();

        // 从标准输入读取一行文本
        io::stdin()
            .read_line(&mut guess)
            .expect("Failed to read line");

        // 将用户输入的字符串转换为数字
        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => {
                println!("Please type a number!");
                continue;
            }
        };

        println!("You guessed: {}", guess);

        // 比较用户输入和随机数
        match guess.cmp(&secret_number) {
            std::cmp::Ordering::Less => println!("Too small!"),
            std::cmp::Ordering::Greater => println!("Too big!"),
            std::cmp::Ordering::Equal => {
                println!("Congratulations! You got it!");
                break;
            }
        }
    }
}

3. 添加依赖

为了使用 rand 库生成随机数,需要在 Cargo.toml 文件中添加依赖(代码粘贴时会弹窗询问):

toml 复制代码
[dependencies]
rand = "0.9.0"  # 确保使用最新版本

4. 运行程序

打开RustRover中的终端,在项目目录下运行以下命令:

bash 复制代码
cargo run

程序会启动并提示用户输入猜测的数字,根据用户的输入给出相应的提示,直到猜对为止。

也可以点击代码中的运行按钮或者RustRover窗口顶端的运行按钮。

运行过程如下:

复制代码
C:/RUST/CARGO/bin/cargo.exe run --color=always --package guess_number_game --bin guess_number_game --profile dev
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.02s
     Running `target\debug\guess_number_game.exe`
Guess the number!
The secret number is: 9
Please input your guess:
88
You guessed: 88
Too big!
Please input your guess:
3
You guessed: 3
Too small!
Please input your guess:
9
You guessed: 9
Congratulations! You got it!

进程已结束,退出代码为 0

三、代码解析

  1. 引入模块和库

    • use std::io;:引入标准库中的 I/O 模块,用于处理输入输出。
    • use rand::Rng;:引入 rand 库的 Rng 特质,用于生成随机数。
  2. 生成随机数

    • let secret_number = rand::rng().random_range(1..=100);:使用 rand 库生成一个 1 到 100 之间的随机数。
  3. 读取用户输入

    • let mut guess = String::new();:创建一个可变字符串变量,用于存储用户输入。
    • io::stdin().read_line(&mut guess):从标准输入读取一行文本,并存储到 guess 中。
  4. 处理用户输入

    • 使用 trim() 方法去除输入字符串的首尾空白字符。
    • 使用 parse() 方法将字符串转换为数字。如果转换失败(例如用户输入的不是数字),捕获错误并提示用户重新输入。
  5. 比较和提示

    • 使用 cmp 方法比较用户输入的数字和随机数,并根据比较结果给出相应的提示。

四、println! 的用法

println! 是 Rust 中一个非常常用的宏,用于在控制台输出内容并换行。以下是关于 println! 的详细用法:

基本用法

println! 的基本语法如下:

rust 复制代码
println!("文本内容");
  • 在双引号中直接写上要输出的文本内容即可。

  • 例如:

    rust 复制代码
    println!("Hello, world!");

    输出:

    复制代码
    Hello, world!

使用占位符

println! 支持使用占位符来动态插入变量的值。常见的占位符包括:

  • {}:用于插入任意类型的值,Rust 会自动调用 Display trait 来格式化输出。
  • {:?}:用于插入任意类型的值,Rust 会调用 Debug trait 来格式化输出,通常用于调试。
  • {:e}{:b}{:x} 等:用于以特定格式输出数字,分别表示科学计数法、二进制和十六进制。

示例

rust 复制代码
let name = "Alice";
let age = 25;
println!("My name is {} and I am {} years old.", name, age);

输出:

复制代码
My name is Alice and I am 25 years old.

对于调试输出:

rust 复制代码
let data = vec![1, 2, 3];
println!("{:?}", data);

输出:

复制代码
[1, 2, 3]

对于格式化数字:

rust 复制代码
let num = 255;
println!("Decimal: {}, Binary: {:b}, Hex: {:x}, Octal: {:o}", num, num, num, num);

输出:

复制代码
Decimal: 255, Binary: 11111111, Hex: ff, Octal: 377

控制输出宽度和精度

println! 还可以通过指定宽度和精度来控制输出格式:

  • {:width$}:指定输出的最小宽度。
  • :.precision$:指定输出的精度(对于浮点数)。

示例

rust 复制代码
let pi = 3.141592653589793;
println!("Pi with 3 decimal places: {:.3}", pi);
println!("Pi with width 10: {:10}", pi);

输出:

复制代码
Pi with 3 decimal places: 3.142
Pi with width 10:       3.141592653589793

输出多个变量

可以一次性输出多个变量,只需要在占位符后按顺序传入对应的变量即可。

示例

rust 复制代码
let a = 10;
let b = 20;
println!("a = {}, b = {}", a, b);

输出:

复制代码
a = 10, b = 20

注意事项

  1. 换行println! 会在输出后自动换行。如果不想换行,可以使用 print! 宏。

    rust 复制代码
    print!("This is a line");
    print!("This is still the same line");
    println!(); // 手动换行

    输出:

    复制代码
    This is a lineThis is still the same line
  2. 调试用途 :如果只是为了调试,可以使用 eprintln! 宏,它会将输出重定向到标准错误输出(stderr),而不是标准输出(stdout)。

    rust 复制代码
    eprintln!("This is a debug message");
  3. 类型限制 :使用 {} 占位符时,变量必须实现了 Display trait;使用 {:?} 占位符时,变量必须实现了 Debug trait。

小结

println! 是 Rust 中非常方便的输出工具,通过占位符和格式化选项,可以灵活地输出各种内容。掌握它的用法可以帮助你更好地调试和展示程序的运行结果。

五、管理多个项目

在 RustRover 中使用 Cargo Workspaces 来同时管理多个项目是一种高效的方式,可以让你更好地组织和维护多个相关的 Rust 项目。以下是详细的步骤,帮助你在 RustRover 中设置和使用 Cargo Workspaces:

1. 创建 Workspace

  1. 创建根目录 :首先,创建一个根目录来存放你的 Workspace。例如,创建一个名为 my_workspace 的文件夹。

  2. 初始化 Workspace :在该目录下创建一个 Cargo.toml 文件,配置为 Workspace。内容如下:

    toml 复制代码
    [workspace]
    members = [
        "project1",
        "project2",
        # 添加更多项目
    ]

2. 创建成员项目

在 Workspace 中,每个成员项目都是一个独立的 Rust 项目。你可以在 RustRover 中创建这些项目,或者通过命令行创建后再导入到 RustRover。

使用命令行创建项目

my_workspace 目录下,运行以下命令来创建成员项目:

bash 复制代码
cargo new project1
cargo new project2

在 RustRover 中创建项目

  1. 打开 RustRover,选择 File -> Open,打开 my_workspace 文件夹。
  2. my_workspace 文件夹中,右键点击空白处,选择 New -> Cargo Crate
  3. 输入项目名称(如 project1),选择项目类型(如 BinaryLibrary),然后点击 Create

3. 配置 Cargo.toml

确保 my_workspace/Cargo.toml 文件中的 members 字段包含了所有成员项目的路径。例如:

toml 复制代码
[workspace]
members = [
    "project1",
    "project2",
]

4. 添加依赖

在每个成员项目的 Cargo.toml 文件中,可以独立添加依赖。例如,在 project1/Cargo.toml 中添加依赖:

toml 复制代码
[dependencies]
serde = "1.0"

5. 构建和运行项目

在 RustRover 中,你可以直接构建和运行 Workspace 中的成员项目。

构建所有项目

在 RustRover 的终端中,运行以下命令来构建所有成员项目:

bash 复制代码
cargo build

构建单个项目

如果你想只构建某个特定的项目,可以使用以下命令:

bash 复制代码
cargo build -p project1

运行项目

运行某个成员项目时,使用以下命令:

bash 复制代码
cargo run -p project1

6. 在 RustRover 中管理项目

RustRover 提供了强大的项目管理功能,可以帮助你更方便地操作和维护 Workspace。

查看项目结构

在 RustRover 的项目视图中,你可以清晰地看到 Workspace 的结构,包括所有成员项目。

编辑代码

在 RustRover 中直接编辑代码,并利用其智能提示、代码格式化等功能来提高开发效率。

调试项目

RustRover 支持调试功能,你可以在成员项目中设置断点、单步执行等,方便调试代码。

7. 提交到版本控制

建议将整个 Workspace 提交到版本控制系统(如 Git),以便更好地管理代码版本。

初始化 Git 仓库

my_workspace 目录下,运行以下命令初始化 Git 仓库:

bash 复制代码
git init

添加文件并提交

bash 复制代码
git add .
git commit -m "Initial commit"

项目管理小结

通过上述步骤,你可以在 RustRover 中使用 Cargo Workspaces 来同时管理多个项目。这种方式不仅可以让项目结构更加清晰,还可以方便地共享依赖和代码,提高开发效率。

总结:学习要点

通过这个项目,你可以学习到以下 Rust 的核心概念:

  1. 变量和可变性:如何声明和使用变量,以及如何处理可变性。
  2. 输入输出:如何从标准输入读取数据,并向标准输出打印信息。
  3. 错误处理:如何处理可能出现的错误(例如用户输入非数字)。
  4. 控制流 :如何使用 loopifmatch 等控制流语句。
  5. 外部库的使用 :如何引入和使用外部库(如 rand)。

这个猜数游戏是一个很好的起点,帮助你熟悉 Rust 的基本语法和开发流程。你可以在此基础上进一步扩展功能,例如限制猜测次数、记录猜测次数等。

注意一个问题呀,就是你如果从来没有学过编程,请绕路吧!

至此,前端JavaScript,后端PRG(Python、Rust、Go),就是我推荐的编程语言啦。

相关推荐
Q_Q19632884751 分钟前
python小说网站管理系统-小说阅读系统
开发语言·spring boot·python·django·flask·node.js·php
goTsHgo11 分钟前
Java的对象头:原理与源码详解
java·开发语言
czhaii25 分钟前
单片机自动排列上料控制程序 下
算法
yunbao00_28 分钟前
C++ 复习(一)
开发语言·c++
冼紫菜33 分钟前
如何使用责任链模式优雅实现功能(滴滴司机、家政服务、请假审批等)
java·开发语言·设计模式·责任链模式
小郝 小郝1 小时前
【C语言】五一回归,复习动脑
c语言·开发语言
程序员JerrySUN1 小时前
驱动开发硬核特训 · Day 30(上篇):深入理解 I2C 总线驱动模型(以 at24 EEPROM 为例)
linux·开发语言·驱动开发
石去皿1 小时前
C++ 中的 `it->second` 和 `it.second`:迭代器与对象访问的微妙区别
开发语言·c++·算法·leetcode
adam_life1 小时前
2025年3月电子学会等级考试五级题——4、收费站在哪里
算法·五级·电子学会等级考试·递归,深搜,回溯·multiset、vector
西柚小萌新1 小时前
【Python从入门到精通】--‘@‘符号的作用
开发语言·python