我如何接受两个 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)
}
我已经编写了一个程序来接受和打印但在接受二维数组时出错。
错误:-
线程 '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)
}