我尝试用C创建一个简单的计算器。数字和运算符应该是参数。我已经有了主要功能和计算功能:
主要的:
int main(int argc, char *argv[]){
long result;
long number1 = strtol(argv[1], NULL, 10);
long number2 = strtol(argv[3], NULL, 10);
result = calculate(number1, number2, argv[2]);
printf("Result: %li", result);
return 0;
}
计算:
long calculate(long number1, long number2, char operator){
long result;
switch(operator){
case '+': result = number1 + number2; break;
case '-': result = number1 - number2; break;
}
return result;
}
当我像这样启动程序时:
./calc 1 + 2
结果为0。我认为运算符参数存在问题,因为当我写'+'而不是argv [2]时,它可以工作。但是我不知道如何解决它,它也可以与参数一起使用。
一个问题是您的calculate
函数需要一个char
,但是您main
传递了一个C字符串。另一个问题是,当传递了意外参数时,switch
set设置失败result
,从而导致未定义的行为。
获得编译器帮助来检测此类问题的一种方法是在调用函数之前为所有函数提供原型:
// Put the prototype first
long calculate(long number1, long number2, char operator);
int main(int argc, char *argv[]){
// main's code with the call of calculate
}
long calculate(long number1, long number2, char operator) {
// implementation
}
放置好原型后,编译器将停止生成错误,因为argv[2]
与预期的类型不匹配char
。您立即发现问题,插入缺少的星号,程序开始按预期运行。
您可能会看到有关第二个问题的警告(result
某些代码路径中未设置);您不应忽略它,并添加一个default
产生一些输出的子句,该输出可以告诉用户出了什么问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句