You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中通过用户输入创建自定义大小数组?编译错误求助

问题原因与解决方法

Rust中固定大小数组[T; N]的长度N必须是编译时常量,你从用户输入获取的f_size是运行时才能确定的值,所以不能用来定义固定数组——这就是编译器报错的根本原因。

另外你的代码还有几个其他问题,一起修正如下:

修正后的完整代码

use std::io;
use rand::Rng;

fn main() {
    // 存储用户输入的数组大小
    let mut max_key = String::new();
    println!("Enter the desired size of your array:");
    io::stdin().read_line(&mut max_key).expect("Failed to read input");
    
    // 转换为usize(向量/数组长度的标准类型)
    let f_size: usize = max_key.trim().parse().expect("Please enter a valid number");

    // 存储用户选择的操作
    let mut command = String::new();
    println!("Enter insert, remove, or find");
    io::stdin().read_line(&mut command).expect("Failed to read input");
    // 去除输入的换行符和空格,统一转为小写避免匹配问题
    let command = command.trim().to_lowercase();

    // 调用函数处理数组和操作
    array_set(f_size, command);
}

fn array_set(size: usize, command: String) {
    let mut rng = rand::thread_rng();

    // 用动态向量(Vec)替代固定数组,支持运行时确定长度
    let mut arr = vec![0; size];

    // 填充前半部分为随机整数
    for i in 0..size/2 {
        arr[i] = rng.gen_range(i32::MIN..i32::MAX);
    }

    // 根据用户命令执行对应操作
    match command.as_str() {
        "insert" => {
            let num = rng.gen_range(i32::MIN..i32::MAX);
            arr.push(num);
            println!("Inserted number: {}, array length now: {}", num, arr.len());
        }
        "remove" => {
            if let Some(removed) = arr.pop() {
                println!("Removed number: {}, array length now: {}", removed, arr.len());
            } else {
                println!("Array is empty, nothing to remove");
            }
        }
        "find" => {
            let target = rng.gen_range(i32::MIN..i32::MAX);
            if arr.contains(&target) {
                println!("Number {} exists in the array", target);
            } else {
                println!("Number {} does not exist in the array", target);
            }
        }
        _ => println!("Invalid command, please enter insert, remove, or find"),
    }
}

关键修正点说明

  • 用Vec替代固定数组:动态向量Vec是Rust中处理运行时可变长度集合的标准类型,支持根据用户输入的长度创建集合,还能直接执行插入、删除操作。
  • 类型统一为usize:集合的长度、索引都使用无符号整数usize,避免类型不匹配的编译错误。
  • 修正元素填充逻辑:原代码的arr.push(num)会在向量末尾追加元素,导致长度超出用户设定值,改为直接修改前半部分的索引位置,保证初始长度符合要求。
  • 处理命令输入:去除输入中的换行符并转为小写,避免因输入格式问题导致命令匹配失败。
  • 完善操作逻辑:通过match语句实现了插入、删除、查找的基础功能框架,可根据需求进一步扩展细节。

内容的提问来源于stack exchange,提问作者user13508239

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 07:11:03