C 计算机程序问题

C 计算机程序问题,c,C,我正在努力弄清楚为什么这个程序不起作用。它应该执行如下操作 5*4=204+2*8=206/3-2=0 然而,事情并不顺利 说明如下: 编写一个名为calculate的C程序,执行简单的算术运算。程序从命令行获取3或5个参数 我不知道现在该怎么办 int calc(int x, char op, int y) { if (op == '+') { return (x+y); } if (op == '-') { return (x-y);

我正在努力弄清楚为什么这个程序不起作用。它应该执行如下操作

5*4=204+2*8=206/3-2=0

然而,事情并不顺利

说明如下:

编写一个名为calculate的C程序,执行简单的算术运算。程序从命令行获取3或5个参数

我不知道现在该怎么办

int calc(int x, char op, int y) {
    if (op == '+') {
        return (x+y);
    }
    if (op == '-') {
        return (x-y);
    }
    if (op == 't') {
        return (x*y);
    }
    if (op == '/') {
        return (x/y);
    }
}

int main(int argc, char *argv[]) {
    int a,b,c,result,doOp;
    char op1, op2;

    if (argc == 4 || argc == 6) {
        a = atoi(argv[1]);
        b = atoi(argv[3]);
        op1 = *argv[2];
    } else {
        printf("Wrong number of arguments!");
        return 0;
    }

    if (argc == 6) {
        c = atoi(argv[5]);
        op2 = *argv[4];

        if ((op1 == '+' || op1 == '-') && (op2 == '/' || op2 == 't')) {
            result = calc(a, op1, calc(b, op2, c));
            printf("%d", result);
        }

        if ((op2 == '+' || op2 == '-') && (op1 == '/' || op1 == 't')) {
             result = calc((calc(a, op1, b)), op2, c);
             printf("%d", result);
        } else {
             result = calc((calc(a, op1, b)), op2, c);
             printf("%d", result);
        }
    }

    if (argc == 4) {
        result = calc(a, op1, b);
        printf("%d", result);
    }
    return 0;
}
给你,阿里扎。 问题有好几个,但最主要的一个是检查中缺少的“else”,以确定使用哪个计算器排序

int calc(int x, char op, int y) {

    if (op == '+') {
        return (x+y);
    }
    if (op == '-') {

        return (x-y);
    }
    if (op == 't') {

        return (x*y);
    }
    if (op == '/') {
        return (x/y);
    }

    printf("Unknown operator!"); // added error check
}

int main(int argc, char *argv[]) {

    int a,b,c,result,doOp;
    char op1, op2;

    if (argc == 4 || argc == 6) {

        a = atoi(argv[1]);
        b = atoi(argv[3]);
        op1 = *argv[2];

    } else {
        printf("Wrong number of arguments!");
        return 0;
    }

    if (argc == 6) {
        c = atoi(argv[5]);
        op2 = *argv[4];

        if ((op1 == '+' || op1 == '-') && (op2 == '/' || op2 == 't')) {

            result = calc(a, op1, calc(b, op2, c));
            printf("%d", result);
        }
        // added else if
        else if ((op2 == '+' || op2 == '-') && (op1 == '/' || op1 == 't')) {

            result = calc((calc(a, op1, b)), op2, c);
            printf("%d", result);
        }
        else {
            result = calc((calc(a, op1, b)), op2, c);
            printf("%d", result);
        }
    }

    if (argc == 4) {

        result = calc(a, op1, b);
        printf("%d", result);
    }

    return 0;
}

“事情没有进展!”——这还不够。到目前为止,您进行了哪些调试工作,这些工作的结果是什么?。就潜在的bug而言,
calc
中的
(x/y)
正在执行整数除法,这意味着它将截断余数,不留下小数结果。该函数还应该警告并非所有的代码路径都指定返回值,而且如果您的输入被成功解析,那么这在逻辑上可能不适用于您,但无论如何您都不会实际验证您的输入,因此,这纯粹是赌博,行为不明确。
main
中的
if
else
语句结构不正确。如果
If((op1='+'| | op1='-')&&(op2='/'| | op2=='t')
为true,则它在那里执行语句,但也执行
else
中的语句。它后面的
if
应该是
else if
。(或者,可以对它们进行重组以减少案例。)除此之外,显示失败的测试案例,包括您看到的输出和您期望从工作程序获得的输出。当
argc==6
时,您有两个
if
语句和一个
else
。您只需要第一个
if
else
。第二个
,如果
做的事情与
其他
完全相同,那么它就不需要了。那么“
4+2*8=20
”应该是
4+2t8=20