Menu
CoddyTech

结构体概览

本课属于 Coddy Rust 学习旅程的“逻辑与流程”单元。第 21 课,共 66 课。

现在你已经了解了结构体是什么,接下来学习如何创建和使用它们。这分为两步:先定义结构体的结构,再创建它的实例。

要定义一个结构体,你需要使用 struct 关键字,后面跟着结构体的名称,并在花括号内写出它的字段。每个字段都有一个名称和类型:

struct User {
    username: String,
    active: bool,
}

这会创建一个 User 结构体的蓝图,其中有两个字段:类型为 String 的 username 和类型为 bool 的 active。

命名约定:Rust 中的结构体名称应使用 PascalCase(也称为 UpperCamelCase),也就是说每个单词都以大写字母开头,例如 User、ProductItem 或 ShoppingCart。如果你不遵循这一约定,Rust 会发出警告。

定义结构体后,你可以为每个字段指定值来创建它的实例:

let user1 = User {
    username: String::from("alice"),
    active: true,
};

请注意,你先写出结构体名称,后面跟着花括号,其中包含每个字段名、冒号和对应的值。字段的顺序不必与定义中的顺序一致。

要访问结构体实例的字段,请使用点表示法:先写实例名称,再写一个点和字段名称:

println!("Username: {}", user1.username);
println!("Active: {}", user1.active);

这里,user1.username 用于访问 user1 的 username 字段,user1.active 用于访问 active 字段。你可以在任何使用普通变量的地方使用这些字段值。

challenge icon

挑战

简单

你会收到 3 个输入:产品名称、价格(小数)和库存数量(整数)。定义一个 Product 结构体,包含 3 个字段:类型为 String 的 name、类型为 f64 的 price,以及类型为 i32 的 stock。然后使用输入值创建这个结构体的一个实例,并输出产品信息。

要求:

  • 定义一个 Product 结构体,包含以下字段:name: String、price: f64 和 stock: i32
  • 将第一个输入读取为产品名称
  • 读取第二个输入,并将其转换为 f64,作为价格
  • 读取第三个输入,并将其转换为 i32,作为库存数量
  • 使用这些值创建一个 Product 结构体实例
  • 按照下方显示的准确格式输出产品信息

输入:

  • 第一行:产品名称(例如,Laptop)
  • 第二行:小数形式的价格(例如,999.99)
  • 第三行:整数形式的库存数量(例如,15)

输出:

  • 第一行:Product: [name]
  • 第二行:Price: $[price]
  • 第三行:Stock: [quantity]

亲手试试

use std::io;

// TODO:在这里定义你的 Product 结构体


fn main() {
    // 读取商品名称
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    // 读取价格
    let mut price_input = String::new();
    io::stdin().read_line(&mut price_input).expect("Failed to read line");
    let price: f64 = price_input.trim().parse().expect("Failed to parse price");
    
    // 读取库存数量
    let mut stock_input = String::new();
    io::stdin().read_line(&mut stock_input).expect("Failed to read line");
    let stock: i32 = stock_input.trim().parse().expect("Failed to parse stock");
    
    // TODO:使用输入值创建 Product 结构体的实例
    
    
    // TODO:按要求的格式输出商品信息
    
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Rust 在线编译器