C - 带参数的计算器

Non*_*ono 2 c parameters pointers calculator argv

我尝试用C创建一个简单的计算器.数字和运算符应该是参数.我已经有了main函数和一个calculate函数:

主要:

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;
}
Run Code Online (Sandbox Code Playgroud)

计算:

long calculate(long number1, long number2, char operator){
    long result;

    switch(operator){
        case '+': result = number1 + number2; break;
        case '-': result = number1 - number2; break;
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

当我启动这样的程序时:

./calc 1 + 2

结果为0.我认为运算符参数存在问题,因为当我写'+'而不是argv [2]时它会起作用.但我不知道如何解决它,它也适用于参数.

das*_*ght 6

一个问题是你的calculate函数需要a char,但是你main传递一个C字符串.另一个问题是,当传递意外的参数时,switch无法设置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
}
Run Code Online (Sandbox Code Playgroud)

在原型到位的情况下,编译器会因错误而停止构建,因为argv[2]它与预期的类型不匹配char.问题立即变得明显,您插入丢失的星号,程序开始按预期工作.

您可能会看到有关第二个问题的警告(不在result某些代码路径中设置); 你不应该忽略它,并添加一个default产生一些输出的子句,告诉用户出了什么问题.