如何在 Rust 中使用用户输入创建自定义大小的数组?

问题描述 投票:0回答:1

这是我第一次使用 Rust,所以我对它一无所知。我知道将这些提示放在主窗口中并不理想,但我计划也将相同的用户输入用于其他功能。我的目标是创建一个半空半满随机生成的整数的数组。我还需要能够插入、删除或查找该数组中的任何整数。为此,我想提示用户输入一个代表数组大小的整数,然后再次提示他们是否想要在该数组中插入、删除或查找整数。

我遇到的问题是将

f_size
传递给
array_set
函数时。它表示
array_set
参数
size
必须是
const
变量。我做错了什么?

fn main() {
 
    // String to store user's max key value
    let mut max_key = String::new();

    // Prompt user for max key value
    println!("Enter the desire size of your array:");

    // Read user input
    io::stdin().read_line(&mut max_key).expect("error");

    // Turn user input into integer
    let f_size: i32 = max_key.trim().parse().expect("not a number");

    // Store user's desired command
    let mut command = String::new();

    // Ask what action they want to perform
    println!("Enter insert, remove, or find");

    // Read user input
    io::stdin().read_line(&mut command).expect("error");


    // Call method to fill array with random numbers and perform the action
    array_set(f_size, command);

}


fn array_set(size: i32, command: String){
   // Random number generator
   let mut rng = rand::thread_rng();

   // Initialize empty array of user defined size
   let mut arr: [i32; size] = [0; size-1];

   // Loop through array and insert random values 
   for i in 0..size/2 {
        let num: i32 = rng.gen();
        arr.push(num);

    }

    arr;
}
arrays rust user-input rust-cargo
1个回答
0
投票

通过一些小的更改,您的代码即可编译:

  • 使用
    Vec
    代替数组;数组的大小在编译时是固定的。
    Vec
    是它们的动态大小版本。
  • 使用
    usize
    而不是
    i32
    来确定尺寸 - Rust 需要所有尺寸均为
    usize
use rand::Rng;
use std::io;

fn main() {
    // String to store user's max key value
    let mut max_key = String::new();

    // Prompt user for max key value
    println!("Enter the desire size of your array:");

    // Read user input
    io::stdin().read_line(&mut max_key).expect("error");

    // Turn user input into integer
    let f_size: usize = max_key.trim().parse().expect("not a number");

    // Store user's desired command
    let mut command = String::new();

    // Ask what action they want to perform
    println!("Enter insert, remove, or find");

    // Read user input
    io::stdin().read_line(&mut command).expect("error");

    // Call method to fill array with random numbers and perform the action
    array_set(f_size, command);
}

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

    // Initialize empty array of user defined size
    let mut arr = vec![0; size];

    // Loop through array and insert random values
    for i in 0..size / 2 {
        let num: i32 = rng.gen();
        arr.push(num);
    }

    arr;
}

代码是否有意义,只要你尝试使用它就知道了。

不过,我已经可以告诉你,除了之前用零初始化它之外,您可能不想一直

.push()
。这不是插入,而是附加。但这当然取决于您的用例。

© www.soinside.com 2019 - 2024. All rights reserved.