我如何接受两个 2d 矩阵并以正确的格式乘法打印答案?

How do I accept two 2d matrix and multiply print the answer in proper format?

我已经编写了一个程序来接受和打印但在接受二维数组时出错。

错误:- 线程 'main' 在 'called Result::unwrap() on an Err value: ParseIntError { kind: InvalidDigit }'、test1.rs:15:39 恐慌 注意:运行 使用 RUST_BACKTRACE=1 环境变量显示回溯

use std::io;

fn main() {
    let width = 3;
    let height = 3;

    let mut array = vec![vec![0; width]; height];
    let mut input_text = String::new();
    for i in 0..width {
        for j in 0..height {
            io::stdin()
                .read_line(&mut input_text)
                .expect("failed to read from stdin");
            let trimmed = input_text.trim();
            let t:u32=trimmed.parse().unwrap(); //error
            array[i][j]=t;
            println!("{:?}", array);
        }
    }

    println!("{:?}", array);
}

输出:- 1

[[1, 0, 0], [0, 0, 0], [0, 0, 0]]

2

线程 'main' 在 'called Result::unwrap() on an Err value: ParseIntError { kind: InvalidDigit }'、test1.rs:15:39 恐慌 注意:运行 使用 RUST_BACKTRACE=1 环境变量显示回溯

你的代码只差一行就可以工作了:)。

您可能会注意到它始终是程序失败的第二个条目。这是因为,此时字符串input_text包含了之前的输入(数字+换行符)。

如果检查 std::io::stdin().read_line()documentation

Locks this handle and reads a line of input, appending it to the specified buffer.

由于此行为,您提供的新输入值将附加到 input_text,而不是替换其内容。在你输入1然后输入2后,input_text包含"1\n2",显然无法正确解析,因此抛出Err()。

因此,使代码正常工作的最简单解决方案是在每次插入后将 input_text 重置为空字符串。

use std::io;

fn main(){

let width = 3;
let height = 3;

let mut array1 = vec![vec![0; width]; height];
println!("Enter values for 1st matrix");
for i in 0..width {
    for j in 0..height {
        let mut input_text = String::new();
        io::stdin()
            .read_line(&mut input_text)
            .expect("failed to read from stdin");
        let trimmed = input_text.trim();
        let t:u32=trimmed.parse().unwrap();
        array1[i][j]=t;
        println!("{:?}", array1);
    }
}

let mut _array2 = vec![vec![0; width]; height];
println!("Enter values for 2st matrix");
for a in 0..width {
    for b in 0..height {
        let mut input_text1 = String::new();
        io::stdin()
            .read_line(&mut input_text1)
            .expect("failed to read from stdin");
        let trimmed1 = input_text1.trim();
        let t1:u32=trimmed1.parse().unwrap();
        _array2[a][b]=t1;
        println!("{:?}",_array2);
    }
}

//mult
let mut multmat = vec![vec![0; width]; height];
//println!("Enter values for 2st matrix");
for a in 0..width {
    for b in 0..height {
        multmat[a][b]=0;
        for k in 0..height{
            multmat[a][b]=multmat[a][b]+array1[a][k]*_array2[k][b];
        }
    }
}

for a in 0..width {
    for b in 0..height {
        print!("{} ",multmat[a][b]);
    }
    println!("\n");
}


//println!("{:?}", array1);
//println!("{:?}", _array2);
//println!("{:?}", multmat)

}