C-带参数的计算器

第九

我尝试用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]时,它可以工作。但是我不知道如何解决它,它也可以与参数一起使用。

谢尔盖·卡里尼琴科(Sergey Kalinichenko)

一个问题是您的calculate函数需要一个char,但是您main传递了一个C字符串。另一个问题是,当传递了意外参数时,switchset设置失败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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章