Menu
CoddyTech

将结构体用作函数参数

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

现在你已经知道如何创建和修改结构体了,接下来我们来看看如何在函数中使用它们。和 Rust 中的其他数据类型一样,你可以将结构体实例传递给函数,也可以让函数返回结构体实例。

要将结构体传递给函数,只需在函数定义中将它作为参数:

fn calculate_area(rect: Rectangle) -> i32 {
    rect.width * rect.height
}

这个函数接受一个 Rectangle 结构体作为参数,并返回一个 i32。在函数内部,你可以像在其他地方一样使用点号表示法访问结构体的字段。

你还可以通过将结构体类型指定为返回类型,让函数返回结构体:

fn create_square(size: i32) -> Rectangle {
    Rectangle {
        width: size,
        height: size,
    }
}

将结构体与函数配合使用,可以让代码更有条理,也更易于理解。你可以把相关数据组合在一起,作为一个定义明确的整体传递,而不必分别传递多个参数。

challenge icon

挑战

简单

你会收到 4 个输入:矩形的宽(整数)、矩形的高(整数)、正方形的边长(整数)和一个选择数字(1 或 2)。定义一个包含两个字段的 Rectangle 结构体:width: i32 和 height: i32。创建两个函数:一个接收 Rectangle 并计算它的面积,另一个接收边长并返回一个表示正方形的 Rectangle。根据输入的选择,计算并打印相应的面积。

要求:

  • 定义一个包含以下字段的 Rectangle 结构体:width: i32 和 height: i32
  • 创建一个名为 calculate_area 的函数,该函数接收一个 Rectangle 作为参数,并返回一个 i32(面积)
  • 创建一个名为 create_square 的函数,该函数接收一个 i32(边长)作为参数,并返回一个宽和高相等的 Rectangle
  • 读取第一个输入,并将其转换为 i32,作为矩形的宽
  • 读取第二个输入,并将其转换为 i32,作为矩形的高
  • 使用这些尺寸创建一个 Rectangle 实例
  • 读取第三个输入,并将其转换为 i32,作为正方形的边长
  • 读取第四个输入,并将其转换为 i32,作为选择数字(1 或 2)
  • 如果选择为 1:计算并打印矩形的面积
  • 如果选择为 2:使用 create_square 创建一个正方形,然后计算并打印它的面积

输入:

  • 第一行:矩形的宽,以整数表示(例如,8)
  • 第二行:矩形的高,以整数表示(例如,5)
  • 第三行:正方形的边长,以整数表示(例如,6)
  • 第四行:选择数字,以整数表示,只能是 1 或 2(例如,1)

输出:

  • 如果选择为 1:Rectangle area: [area]
  • 如果选择为 2:Square area: [area]

亲手试试

use std::io;

// TODO: 在这里定义 Rectangle 结构体


// TODO: 在这里定义 calculate_area 函数


// TODO: 在这里定义 create_square 函数


fn main() {
    // 读取矩形的宽度
    let mut width_input = String::new();
    io::stdin().read_line(&mut width_input).expect("Failed to read line");
    let width: i32 = width_input.trim().parse().expect("Invalid input");
    
    // 读取矩形的高度
    let mut height_input = String::new();
    io::stdin().read_line(&mut height_input).expect("Failed to read line");
    let height: i32 = height_input.trim().parse().expect("Invalid input");
    
    // 读取正方形的边长
    let mut side_input = String::new();
    io::stdin().read_line(&mut side_input).expect("Failed to read line");
    let side: i32 = side_input.trim().parse().expect("Invalid input");
    
    // 读取选项
    let mut choice_input = String::new();
    io::stdin().read_line(&mut choice_input).expect("Failed to read line");
    let choice: i32 = choice_input.trim().parse().expect("Invalid input");
    
    // TODO: 在下方编写代码
    // 创建一个 Rectangle 实例,检查选项,并计算相应的面积
    
    
    // 根据选项输出结果
    // 使用:println!("Rectangle area: {}", area); 或 println!("Square area: {}", area);
}
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: Rust 在线编译器