我正在用rust写一个非常简单的命令行计算器,先得到一个数字,一个运算符,然后是另一个数字,然后进行计算并打印结果。为了显示我从命令args得到的内容,我将它们打印在主代码之前的循环中。对于加号,减号和除法,我可以正常工作,但是对于乘法,在打印时会得到意外的结果,而不是星号(*)用于乘法,但是会在当前目录中得到文件列表。 这是我的rust代码,如果有任何解决方法,我将感谢您的解释。
use std::env;
fn main(){
let args: Vec<String> = env::args().collect();
for arg in args.iter(){
println!("{}", arg);
}
let mut result = 0;
let opt = args[2].to_string();
let oper1 = args[1].parse::<i32>().unwrap();
let oper2 = args[3].parse::<i32>().unwrap();
match opt.as_ref(){
"+" => result = oper1 + oper2,
"-" => result = oper1 - oper2,
"*" => result = oper1 * oper2,
"/" => result = oper1 / oper2,
_ => println!("Error")
}
println!("{} {} {} = {}", oper1, opt, oper2, result);
}
答案 0 :(得分:6)
通配符(*)正在扩展。 Shell甚至会在看到您实际键入
之前将其发送给程序为避免这种情况,您可以将其用引号引起来,如下所示:
./program 1 "*" 1