use std::env;
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() < 3 {
eprintln!("Usage: rust_app --operation <add|subtract|...> --operand1 <number> --operand2 <number>");
std::process::exit(1);
}
let mut operation = String::new();
let mut operand1 = 0.0;
let mut operand2 = 0.0;
for i in 1..args.len() {
match args[i].as_str() {
"--operation" if i + 1 < args.len() => {
operation = args[i + 1].clone();
},
"--operand1" if i + 1 < args.len() => {
match args[i + 1].parse::<f64>() {
Ok(num) => operand1 = num,
Err(_) => {
eprintln!("Invalid operand1 value. Expected a number.");
std::process::exit(1);
}
}
},
"--operand2" if i + 1 < args.len() => {
match args[i + 1].parse::<f64>() {
Ok(num) => operand2 = num,
Err(_) => {
eprintln!("Invalid operand2 value. Expected a number.");
std::process::exit(1);
}
}
},
_ => {
eprintln!("Unknown argument: {}", args[i]);
std::process::exit(1);
}
}
}
let result = match operation.as_str() {
"add" => operand1 + operand2,
"subtract" => operand1 - operand2,
_ => {
eprintln!("Unsupported operation: {}", operation);
std::process::exit(1);
}
};
println!("Result: {}", result);
}
- 解析命令行参数:使用
env::args()
收集命令行参数,并检查参数数量是否足够。
- 提取操作模式和操作数:通过遍历参数,匹配特定的参数名(如
--operation
、--operand1
、--operand2
),并提取对应的值。
- 参数校验:对操作数进行解析,确保其为有效的数字。如果参数无效,输出错误信息并退出程序。
- 执行操作并输出结果:根据操作模式(
add
或subtract
等)执行相应的运算,并将结果输出到控制台。如果操作模式不支持,同样输出错误信息并退出程序。